Прежде чем приступить к созданию желаемого формата URL-адреса, необходимо сначала понять, какие форматы поддерживает менеджер URL-адресов при работе в Yii2.И как создавать правила для создания этих форматов.
Поддерживаемые форматы URL
Формат URL по умолчанию;
Формат URL по умолчанию использует параметр запросаимя r
для представления маршрута и обычные параметры запроса для представления параметров запроса, связанных с маршрутом.URL /index.php?r=xmple/test¶m1=100
представляет маршрут xmple/test
и параметр запроса param1
100
.Формат URL по умолчанию не требует какой-либо настройки диспетчера URL и работает в любой настройке веб-сервера.
Красивый формат URL.
Используется дополнительный путь, следующий заимя сценария входа для представления маршрута и связанных параметров запроса.Например, дополнительный путь в URL /index.php/xmple/100
равен /xmple/100
, который может представлять маршрут xmple/test
и параметр запроса param1
100
с правильным правилом URL.Чтобы использовать красивый формат URL, вам нужно будет разработать набор правил URL в соответствии с фактическим требованием о том, как должны выглядеть URL.
Это правило может удовлетворять приведенному выше утверждению 'xmple/<param1:\d+>' => 'xmple/test',
Подробнее об этом здесь
Так что не пойдетпоказывать
index.php/xmple/test/param1/value1/param2/value2
, но
index.php/xmple/test/value1/value2
или index.php/xmple/value1/value2
или xmple/test/value1/value2
.
Как создавать правила
Вы можете настроитьyii\web\UrlManager::$rules
как массив, ключами которого являются шаблоны и значения соответствующих маршрутов .
Подробнее здесь
Вы можете использовать правило 'xmple/test/<param1:\w+>/<param2:\w+>'=>'xmple/test'
, учитывая, что вы будете отправлять параметры, которые соответствуют любому символу слова (равному [a-zA-Z0-9_])
в качестве параметра), который будет выводить xmple/test/value1/value2
с 'showScriptName' => false,
или index.php/xmple/test/value1/value2
в противном случае.
Если правило будет использоваться для одного контроллера / действия, или вы можете использовать, как описано, или использовать параметризованный маршруты , что позволяет использовать правило URL для сопоставления нескольких маршрутов.
Вы можете изменить свой urlManager на следующее
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'xmple/test/<param1:\w+>/<param2:\w+>'=>'xmple/test'
],
],