Я следил за этим репетит (копия этот) для создания пользовательских правил для именованных параметров. В моем массиве правил я добавил 2 верхние строки для разбора вперед и назад Assortment[groupCategory]
параметр.
'urlManager'=>array(
'showScriptName'=>false,
'urlFormat'=>'path',
'rules'=>array(
'assortment/<Assortment[groupCategory]:\d+>'=> 'assortment/index',
'assortment/<Assortment%5BgroupCategory%5D:\d+>'=> 'assortment/index',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),
Это работает вперед:
с http://tarex.ru/assortment/index/Assortment[groupCategory]/1
YII признать Assortment[groupCategory]
в качестве параметра GET равен 1.
Но если из формы я прошу
http://tarex.ru/assortment/index?Assortment[groupCategory]=2
или же http://tarex.ru/assortment/index?Assortment%5BgroupCategory%5D=2
он не превращает его в читабельный ulr, например:
http://tarex.ru/assortment/index/Assortment[groupCategory]/2
Зачем? Тут говорят, что это двусторонний URL-менеджер.
С другой стороны, при создании URL-адреса с сообщением / индексом маршрута и тегом параметра компонент urlManager также будет использовать это правило для создания нужного URL-адреса /index.php/posts/yii. По этой причине мы говорим, что urlManager — это двусторонний менеджер URL.
он не превращает его в читабельный ульр
Да, Yii не преобразует URL ни в адресную строку браузера, ни в параметр действия формы. Все запускается «за кадром».
Я рекомендую переписать ваше правило
'assortment/<Assortment[groupCategory]:\d+>'=> 'assortment/index'
в
'assortment/<groupCategory:\d+>'=> 'assortment/index'
Таким образом, если вы идете на URL http://tarex.ru/assortment/index/1
actionIndex()
метод будет вызван в контроллере с именем AssortmentController
, И параметр $groupCategory = 1
будет передано к нему. Для обработки переданной переменной вам, вероятно, нужно изменить сигнатуру методов на:
public function actionIndex( $groupCategory ) {}
Обратный путь будет, если вы создадите URL, получив параметры следующим образом:
echo Yii::app()->controller->createUrl( 'assortment/index', array( 'groupCategory' => 1 ) ) ;
URL /assortment/index/1
должен быть создан.
Других решений пока нет …