Реализация ссылки из backend в frontend

Сайт я построил по структуре описанной тут http://www.yiiframework.com/doc/cookbook/33/

Все отлично работает и таким разделением я доволен. Но возникла одна проблема. Потребовалось создать ссылку из админки на клиентскую часть. Проблема во первых в том что urlManager подставляет в ссылку admin.php вместо требуемого index.php. Во вторых правила преобразования url на находятся в конфиг файле frontend.

Я реализовал это таким образом.




class FrontendUrlManager extends CUrlManager {


    private $_baseUrl;


    public function __construct() {

        $frontend=include(Yii::getPathOfAlias('frontend.config.main').'.php');


        $config=$frontend['components']['urlManager'];

        unset($config['class']);

        foreach($config as $key=>$value)

			$this->$key=$value;

    }


	public function getBaseUrl()

	{

		if($this->_baseUrl!==null)

			return $this->_baseUrl;

		else

		{

			if($this->showScriptName)

				$this->_baseUrl=Yii::app()->getRequest()->getBaseUrl().'/index.php';

			else

				$this->_baseUrl=Yii::app()->getRequest()->getBaseUrl();

			return $this->_baseUrl;

		}

	}


}

Использую сейчас так

Yii::app()->frontendUrlManager->createUrl(‘site/index’);

Решение пока устраивает но решил показать его тут. Быть может есть значительно лучший вариант.

А попробуй сделать класс правил, что-то в этом духе:


class BackendUrlRule extends CBaseUrlRule

{

    public function createUrl($manager, $route, $params, $ampersand)

    {

         $request = Yii::app()->request;

         $routeParts = explode('/', $route);

         $firstPart = array_shift($routeParts);


         if($firstPart === 'backend')

         {

             $url = $request->getBaseUrl() . '/backend.php/' . implode('/', $routeParts);


             foreach($params as $key => $value)

                 $url .= $key . '/' . urlencode($value) . '/';


             return $url;

         }


         return false;

    }


    public function parseUrl($manager, $request, $pathInfo, $rawPathInfo)

    {

         return false; //Тут вроде ничего не надо, если что разберешься сам.

    }

}

В конфиге дописать на последнем месте (т.к. скорость в backend не важна):


'components' => array(

    'urlManager' => array(

        'rules' => array(

            //...

            //...

            //...

            //...

            array(

                'class' => 'BackendUrlRule',

            ),

Теперь для создания ссылок backend используй:


Yii::app()->createUrl('backend/post/update', array('pk' => 1));

а для frontend:


Yii::app()->createUrl('post/view', array('pk' => 1));