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

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

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

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

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

Другие статьи

Ура! Вы меня уговорили. На улице потеплело и я теперь добрый. Приглашаю всех желающих на бесплатные вебинары по веб-программированию в общем и по разработке на Yii2 Framework в частности. Конечно не такие полезные, как на картинке, но тоже сойдёт :)

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

Ну вот опять! Сел сочинить небольшой комментарий к посту на форуме и разошёлся на целую статью. В общем, публикую здесь. Кстати, заходите на форум (ссылки ниже в статье). Там весело. Пока немного отдохнул после практикума. Оказалось, что двухмесячные курсы сильно выматывают расходами энергии на подготовку и проведение. Пришлось на два месяца забросить другие дела. Теперь пора с новыми силами возвращаться в блог.

Чуть больше месяца назад стартовала предварительная запись на новый мини-спринт по изучению систем контроля версий. Месяц уже начался две недели назад, и у меня есть для Вас несколько хороших новостей. Думал отправить это письмо только записавшимся, но потом решил выложить обращение и здесь, так как личных тайн здесь нет. Итак, поехали!

Комментарии

 

Aleksey Samohvalov

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

Ответить

 

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

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

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

Ответить

 

SSDD

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

Ответить

 

Сергей

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

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

Ответить

 

Евгений

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

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

Ответить

 

Тимур

Здравствуйте, Дмитрий. Нужен ваш совет по поводу написания правил для 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

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

Прошу Вашей помощи. Решил перейти на хостинг (сейчас все на домашнем 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

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

Ответить

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

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


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



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