UrlManager и UrlRule: Беседа о маршрутизации в Yii2

Возникла идея с разрешения собеседника записать и выложить небольшую спонтанную консультацию. Первый блин записи со скайпа вышел комом: голоса друг на друга накладываются и по громкости разные. Кто осилит досмотреть до конца, тот герой :)

Рассказываю немного о маршрутизации, устройстве компонента UrlManager, показываю примеры написания правил в дополнение к предыдущим статьям. Следующий раз надо звуки с динамика и с микрофона отдельно записывать и вручную сводить:

YouTube пережал до высоты 720. Печаль-беда. В оригинальном разрешении можно взять здесь.

Ну и, как обычно, подписывайтесь на канал, на рассылку блога здесь в сайдбаре, высказывайте критику, давайте советы и предлагайте идеи в комментах здесь или там. И поделитесь в комментах программкой или советами для записи скринкастов в Ubuntu, чтобы в скайпе голос с динамиков от голоса с микрофона не отставал. Заранее спасибо!

Комментарии

 

Aleksey Samohvalov

На будущее - в видеозаписях (по возможности конечно) очень критично сократить длительность видео. Перемотал на 20 минуту - вы там еще просто ссылки в вебе обсуждаете...

Ответить

 

Александр Шиллинг

Насколько я знаю правильно говорить "Йи" (Yii), а не "Юии" :)

Видео в целом понравилось, правда госяк со звуком и низкая громкость твоего микрофона (Дмитрий) немного сбивает общую атмосферу :) ... и два часа это жесть :) мне кажется лучше сделать вырезку, где самое интересно, а всё остальное в видео архив - время деньги :)

Ответить

 

SSDD

Спасибо за видео, побольше уверенности и вперед !!!

Ответить

 

Сергей

RecordMyDesktop не пробовали?
Я её недавно себе ставил, чтоб просто снять один "немой" скринкаст. Был удивлён, когда оказалось что все звуки в комнате, в момент записи скринкаста, даже шорохи, отлично записались (ноутбучный, встроенный микрофон).

По крайней мере попробовать стоит :)

Ответить

 

Евгений – atlant5.com

Отличное объяснение!

Побольше бы таких пояснений конкретных возможностей Yii2

Ответить

 

Тимур – www.crimeatrips.com

Здравствуйте, Дмитрий. Нужен ваш совет по поводу написания правил для UrlManager. Имею модуль "menu", в котором 2 контроллера: "default" и "items". Сейчас маршрутизатор настроен так:

'<_m:\w+>/<id:\d+>' => '<_m>/default/view',
'<_m:\w+>/<id:\d+>/<_a:\w+>' => '<_m>/default/<_a>',
'<_m:\w+>/<_c:\w+>/<id:\d+>' => '<_m>/<_c>/view',
'<_m:\w+>/<_c:\w+>/<id:\d+>/<_a:\w+>' => '<_m>/<_c>/<_a>',
'<_m:\w+>' => '<_m>/default/index',
'<_m:\w+>/<_c:\w+>' => '<_m>/<_c>/index',
'<_m:\w+>/<_c:\w+>/<_a:\w+>' => '<_m>/<_c>/<_a>',


Проблема появилась в генерации url для "items" контроллера, т.е в результате нужно генерировать по такому шаблону:

'<_m>/<menuID:\d+>/<_c>/<id:\d+>/_a>'

но так, чтобы оно не затронуло и других модулей, которым такая маршрутизация не нужна.

Как это лучше сделать и как должны выглядеть правила маршрутизатора? Может \yii\web\GroupUrlRule?

Ответить

 

Дмитрий Елисеев

Создайте вначале правило только для items:

'<_m:items>/<menuid:>/<_c>/<id:>/<_a>'
Ответить

 

Вячеслав

А как можно попасть к вам на консультацию такую же? :)

Ответить

 

Дмитрий Елисеев

Обратиться в обратную связь или на почту.

Ответить

 

Olexander

А как лучше создать универсальное правило?

Если есть парное к-во параметров и больше-ровно 4, то первые два - это стандартно controller/action, а остальные пары - это ключ значение в масиве $_GET

Например

/controller/action/category/computers/page/1/limit/2 => /controller/action + [category => computers, page => 1, limit=>2]
/controller/action/category/computers/page/1/limit => 404 ошибка

Спасибо!

Ответить

 

Дмитрий Елисеев

Раньше это делалось указанием звёздочки в конце. В любом случае, всё можно сделать через свой класс типа UrlRuleInterface.

Ответить

 

Andrewkha – sportforecast.net

Дмитрий, добрый день!

Прошу Вашей помощи. Решил перейти на хостинг (сейчас все на домашнем NAS, жутко тормозит). Проблема - хостер не предоставляет доступ для настройки вируальных хостов, соответственно, во все URL добавляется /web

Положил в корень сайта вот такой .htaccess

RewriteEngine on 
RewriteBase / 
RewriteCond %{HTTP_HOST} ^cv63241\.tmweb\.ru$ 
RewriteCond %{REQUEST_URI} !/web/ 
RewriteRule ^(.*)$ /web/$1 [L]

главная страница теперь доступна через нормальный URL, но ко всем ссылкам все равно дописывается web. Есть подозрение, что это можно решить с помощью правил URL-менеджера. Добавил самым первым правило

'<action:>' => 'web/<action>',

но это не помогло. помогите, пожалуйста

Ответить

 

Дмитрий Елисеев
'request' => [
    'baseUrl' => '',
    ...
];
Ответить

 

Andrewkha – sportforecast.net

Огромное спасибо за быстрый ответ! Все работает

Ответить

 

Назар Мирон

Добрый день Дмитрий!
Мне нужна ваша помощь.
В yii2 cong записано так

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        '<controller:\w+>/<action:(\w|-)+>' => '<controller>/<action>',
        '<slug:[a-zA-Z0-9=_\-]+>' => '/site/page',
    ],
], 

Мне нужно чтобы слаг разбирал символ "?" в запросе /?p=Codex
Как это сделать?

Ответить

 

Дмитрий Елисеев

Только через написание своего класса-правила.

Ответить

 

Назар Мирон

Спасибо за помощь Дмитрий, теперь знаю куда двигаться.

Ответить

Оставить комментарий

Войти | Завести аккаунт | Войти через


(никто не увидит)





Можно использовать теги <p> <ul> <li> <b> <i> <a> <pre>