Я создал пользовательский UrlManager для добавления параметра языка в начале маршрута $.Yii, custom UrlManager :: createUrl() crash the widget-create-link
что это сделать, это $ маршрут = «сайт/индекс» ---> $ маршрутную = «EN/сайт/индекс» (или другого тока с помощью языка)
Это работает, но я есть на какой-то странице я не хочу, чтобы правило «createUrl» применялось, некоторые виджеты, которые создают ссылки (например, разбиение на страницы CGridView, а также кнопку обновления), будут делать ошибку.
URL of the page : en/controller/admin/
pagination URL created : en/controller/admin/language/en/model_page/2 (error)
what I want : en/controller/admin?model_page=2 (this will work)
Кроме того, ссылка в Gii также имеет некоторые ошибки.
Как я могу выполнить свою обычную маршрутизацию маршрутов с изначальной экологией Yii?
защищенные/Config/main.php
'urlManager'=>array(
'class' =>'application.components.UrlManager',
'urlFormat'=>'path',
'showScriptName'=>false,
'caseSensitive'=>false,
'rules'=>array(
'<language:(fr|en)>/<controller:\w+>/<action:\w+>/id/<id:\d+>'=>'<controller>/<action>',
'<language:(fr|en)>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<language:(fr|en)>/<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
'<language:(fr|en)>/<controller:\w+>'=>'<controller>',
)
)
защищенные/компоненты/UrlManager.php
class UrlManager extends CUrlManager{
public function createUrl($route,$params=array(),$ampersand='&'){
$route = Language::addRouteLang($route);
return parent::createUrl($route, $params, $ampersand);
}
}
защищенные/компоненты/Language.php
class Language extends CComponent{
public static $current_lang;
public static $current_lang_id;
public static function getCurrentLang(){
return self::$current_lang_id;
}
public static function addRouteLang($route){
//To do : make this get data from dataBase
$langList = array('fr', 'en');
//get first para of $route
$routeArr = explode("/",$route);
$firstPara = $routeArr[0];
if (! in_array($firstPara, $langList)){
//there is no language parameter
if (Yii::app()->user->hasState('language')){
//check user State
$lang = Yii::app()->user->getState('language');
$route = $lang.'/'.$route;
}else if(isset(Yii::app()->request->cookies['language'])){
//check cookies
$lang = Yii::app()->request->cookies['language']->value;
$route = $lang.'/'.$route;
}
}
return $route;
}
......
}