Улучшение URL через правила urlManager работает только в одну сторону

Я следил за этим репетит (копия этот) для создания пользовательских правил для именованных параметров. В моем массиве правил я добавил 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.

0

Решение

он не превращает его в читабельный ульр

Да, 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 должен быть создан.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]