Маршруты - это одна из ключевых концепций фреймворка Yii2, которая позволяет определить, как URL-адрес будет соответствовать контроллерам и действиям вашего приложения. Маршруты определяются в конфигурационном файле config/web.php
или в отдельных модулях.
На Yii2 маршруты могут быть определены в двух форматах: массивы
и строки
.
Формат массивов:
В формате массивов маршруты определяются как ассоциативный массив, где ключи являются путем, а значения - строки, указывающие контроллер и действие.
Пример:
return [ 'post/index' => 'post/index', 'post/view/<id:d+>' => 'post/view', ];
В приведенном выше примере, путь /post/index
будет соответствовать действию index
контроллера post
, а путь /post/view/123
будет соответствовать действию view
контроллера post
, где 123
- это значение переменной id
, ограниченное регулярным выражением d+
.
Формат строки:
В формате строки маршруты определяются в виде строки, где контроллер и действие разделены косой чертой /
.
Пример:
return [ 'post/index' => 'post/index', 'post/view/<id:d+>' => 'post/view', ];
Этот пример имеет тот же результат, что и предыдущий.
Для более сложных маршрутов, вы можете использовать специальный синтаксис шаблонов для определения переменных и дополнительных параметров:
return [ 'post/index' => 'post/index', 'post/view/<id:d+>' => 'post/view', 'post/<action:(create|update|delete)>' => 'post/<action>', 'post/<category:w+>/<id:d+>' => 'post/view', ];
В этом примере добавлены два дополнительных маршрута: /post/<action>
будет соответствовать действиям create
, update
и delete
контроллера post
, а /post/<category>/<id>
будет соответствовать действию view
, где category
может быть любым словом (w+
), а id
является числом.
Yii2 также предоставляет возможность создавать универсальные маршруты
, которые могут соответствовать любым URL-адресам и перенаправлять их на определенные контроллеры и действия. Это достигается с использованием компонента UrlManager
в конфигурационном файле приложения.
return [ 'components' => [ 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ '<controller:w+>/<action:w+>' => '<controller>/<action>', ], ], ], ];
В приведенном выше примере все URL-адреса вида /контроллер/действие
будут перенаправлены на соответствующий контроллер и действие.