SEO -дружелюбный URL в YII
-
27-10-2019 - |
Вопрос
Мне нужно правило для http://example.com/post/view/id/1 URL, который будет отображаться таким http://example.com/post/post_title. Анкет Вместо идентификационного номера я хочу отобразить имя или заголовок сообщения.
Моя конфигурация выглядит так:
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
//'<controller:\w+>/<id:\d+>'=>'<controller>/view',
//'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
//'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
'showScriptName'=>false,
),
Решение
вам нужно иметь правило, которое выглядит так
'post/<post_title:\w+>'=>'postController/view/title/<post_title>',
Это просто говорит приложению для пересылки запросов, которые начинаются с post/post_title в ActionView Post Controller, где $ _get ['title'] устанавливается в post_title ...
Надеюсь, это поможет.
Другие советы
Это простое правило
'post/<post_title:\w+>' => 'post/view'
Если нужен такой URL -адрес http://example.com/post/some-title-with-hyphen
'post/<post_title:[-\w]+>' => 'post/view'
И вам нужно действие контроллера с аргументом $ post_title
public function actionView($post_title) {
...
По умолчанию YII только заканчивает идентификатор сообщения, если вы хотите отобразить заголовок Post, вам нужно получить доступ к DB в соответствии с правилами пользовательского класса URL. В учебнике YII есть пример Использование классов Custom-Url-Rule