Yii Framework Forum: Фронтен / Бекенд И Язык Для Модуля - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Фронтен / Бекенд И Язык Для Модуля Rate Topic: -----

#1 User is offline   c.raven 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 13-October 12

Posted 05 March 2013 - 01:13 PM

Доброго времени, хочу поделиться своим соображением насчет очередного способа разделения приложения на юзер и админ части. Суть состоит в том, чтоб приложение во время запроса могло определить к какой части осуществляеться запрос.

Итак наш клас HttpRequest

class HttpRequest extends CHttpRequest
{
	private $_pathInfo;
	private $_language;
	private $_appEnd;
	
	public function getPathInfo()
	{	
		if($this->_pathInfo===null)
		{
			$pathInfo = parent::getPathInfo();
                        
                        //разбиваем pathInfo в масив, нам нужна только первая часть
			$parts = explode('/', $pathInfo);
			
			if(isset($parts[0]))
			{
                                // здесь проверяем соответствие первого сегмента языку приложения
                                // из Yii::app()->params['app_languages']
				if(in_array($parts[0], params('app_languages')) and $parts[0]!=params('defaultLanguage'))
				{
					$this->_appEnd='frontend';
					$this->_language=$parts[0];
					unset($parts[0]);
					$pathInfo = implode($parts, '/');
				}

                                // если $parts[0] не язык, то в таком случаи ето может бить наш путь в админку
				elseif($parts[0]==params('app_backend_url'))
				{
					$this->_appEnd = 'backend';
					$this->_language=params('app_language');
					unset($parts[0]);                              //извлекаем параметр из $pathInfo
					$pathInfo = implode($parts, '/');
				}
			}
                        // по дефолту ставим фронтенд и язык по умолчанию
			else
			{
				$this->_appEnd='frontend';
				$this->_language=params('app_language');
			}
			$this->_pathInfo = $pathInfo;
		}
		return $this->_pathInfo;
	}

	public function getLanguage()    // геттер для языка приложения
	{
		if($this->_language)
			return $this->_language;
		$this->getPathInfo();
		return $this->_language;
	}
	
	public function getAppEnd()    // геттер для текущего аппенда
	{
		if($this->_appEnd)
			return $this->_appEnd;
		$this->getPathInfo();
		return $this->_appEnd;
	}
}


Итак наш реквест умеет определять ту часть приложения в которая нам нужна.
Настало время настройки модуля

class WebModule extends CWebModule
{
	public function init()
	{
		switch(Yii::app()->getRequest->getAppEnd) // здесь все по простому =)
		{
			case 'frontend':
				$this->controllerPath=$this->basePath.DS.'frontend/controllers';
				$this->viewPath=$this->basePath.DS.'frontend/views';
				break;
			case 'backend':
				$this->controllerPath=$this->basePath.DS.'backend/controllers';
				$this->viewPath=$this->basePath.DS.'backend/views';
				break;
		}
	}
}


В роутинге мы можем настроить все типично:

array(
    '<_m:\w+>' => '<_m>/default/index'
    '<_m:\w+>\<_c:\w+>' => '<_m>/<_c>/index'
    '<_m:\w+>\<_c:\w+>\<_a:\w+>' => '<_m>/<_c>/<_a>'
)


Итак что мы имеем. Каждий модуль со своей адмикой
доступной по адресу который ми устанавливаем в Yii::app()->params['app_backend_url'];

Буду рад выслушать ваше мнение относительно такого подхода =)
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users