PSR-7 фреймворк 2/7: Контроллеры и маршрутизация

preview_player
Показать описание
Второй урок серии скринкастов по изучению PSR-7 микрофреймворков в PHP. Сегодня рассмотрим разделение на страницы и разделы сайта путём создания контроллеров и сопутствующей системы маршрутизации.

Тайм-коды:
00:00:00 - Вступление, повторение выводов предыдущего урока
00:08:34 - Составление плана, создание новых страниц
00:11:57 - Избавление от копипасты, Postprocessing
00:15:43 - Prepocessing
00:20:37 - Обзор стадий выполнения
00:24:25 - Примитивная маршрутизация
00:26:15 - Экшен блога, маршрутизация блога
00:28:30 - Вынос экшена в файл
00:31:56 - Экшен как анонимная функция
00:34:48 - Экшен поста блога
00:40:56 - Суть контроллера
00:48:46 - Система маршрутизации, теория
00:58:22 - Коллекция маршрутов, теория
01:01:51 - Генерация адресов, теория
01:06:40 - Упрощённый синтаксис маршрутов, теория
01:12:46 - RouterTest
01:19:01 - RouteCollection
01:21:20 - Route
01:22:39 - Router
01:23:55 - Result
01:24:55 - Методы match и generate
01:26:18 - RequestNotMatchedExeption
01:28:07 - RouteNotFoundExeption
01:28:28 - Полноценный маршрутизатор, регулярные выражения
01:41:43 - Реализация маршрутизатора (Initialization)
01:43:30 - Реализация маршрутизатора (Running)
01:46:29 - Рефакторинг, GRASP
01:52:08 - Метод addRoute
01:55:16 - Интерфейс Route
01:57:28 - Вынесение экшенов в классы
02:02:07 - Группировка и разделение контроллеров
02:05:38 - Объект как функция
02:09:15 - HelloActionTest
02:10:44 - Ленивое создание объектов экшенов
02:15:28 - Добавление ActionResolver
02:21:21 - Готовые маршрутизаторы, теория
02:33:57 - Подключение Aura.Router
02:36:08 - Проблема перехода с одного маршрутизатора на другой
02:44:06 - AuraRouterAdapter
02:48:43 - Сила абстракции
02:52:33 - Выводы
Рекомендации по теме
Комментарии
Автор

Дмитрий самый лучший преподаватель на свете. Он не просто рассказывает как надо, а анализирует каждый шаг, давая нам самим понять причину принятых решений. Грамотный русский язык, прекрасная речь, добрая душа. Обожаю смотреть и пересматривать!
Дмитрий, спасибо!

davidtema
Автор

В июле 2024го пришлось повозиться с Aura потому что там всё по-другому уже, но в итоге работает

midzukumono
Автор

Пожалуй лучшая серия видео про устройство фреймворков! Очень качественна подача материала, отличные примеры.

ghost
Автор

Дмитрий, спасибо за прекрасную работу!

alexeydru
Автор

Большое спасибо!Как всегда все качественно!

bobpps
Автор

Благодарю! Много полезного и очень доходчиво )) Нравится, что показано тестирование, рефакторинг и вообще путь мысли от простого к сложному.

otgwwtz
Автор

Спасибо за урок! С удовольствием посмотрел первую часть :) Вы хорошо объясняете. Буду дальше смотреть :)

an.laskevych
Автор

Дмитрий спасибо большое
Многое для себя открыл

taalayedtech
Автор

Спасибо за отличное видео. Многие будут его использовать как полноценный курс. Возможно, более удобным будет размещать исходники для отдельных видео в отдельные git-репозитории.

danvop
Автор

2:10:00 чтобы корректно запускались тесты, нужно обновить composer.json
в секции
"autoload": {
"psr-4": {
"App\\": "src/App/",
....

AlexanderKryachko
Автор

Очень хорошо! Для меня пока сложновато, но все равно: для таких непростых тем у Дмитрия оптимальное сочетание - объема материала, детализации разжевывания и скорости подачи.
Если придираться, то залитый с github код не влетает на nginx в своем последнем коммите - ошибка 502. Если брать более ранние коммиты, то сайт работает.
Но это не страшно, будет самому интересно разобраться в чем проблема в конкретном коммите.

estupidoParapente
Автор

Наверное это вкусовщина, но ауровский выглядит интереснее, ввиду того, что в том экшене куда он передается не нужен роутер целиком, достаточно генератора. Но как пример для создания адаптера мне понравился.

efimov
Автор

Дмитрий, как ты не устаешь столько без перерыва говорить?) В чем секрет?

codingfox
Автор

ураааа! вася работает
я подключаю 10 тыс строк кода диакторса потому что мне лень писать 4 строчки хеадеров

krlmege
Автор

Я дополню. Если кому-то хочется передавать лишь строку с названием класса и строку с названием метода [HomeController::class, 'process'], можно переопределить статические методы __callStatic и __call, чтобы они соответственно вызывали нужные методы без инициализации объекта.

windstepgaming
Автор

Pochemu ne vikladivaetsya 1080 kachestva ? Vse je popriyatnee budet smotret nemnogo ...

alexgolim
Автор

1:40:00 в use передается &$arguments, но внутри изменений массива не происходит, в таком случае внутрь идет указатель и передача по ссылке получается не нужной.

lbbrepb
Автор

Примерно на 1:40:49 тесты не проходят, вываливаются 3 ошибки. 1я preg_match no ending delimiter '/' found 2, 3 unknown modifier '{'. Или я где-то провтыкал или в коде ошибка.

Провтыкал конкатенацию в preg_match (рядом с return метода match) префикса '~^' и постфикса '$~i'.

1:51:27 - почему снаружи generate и внутри для последнего аргумента 2 раза вызывается array_filter? Так должно быть?

efimov
Автор

Не надо переменные в коде реплейсом менять, в PhpStorm есть для это специальная и удобная функция Refactor->Rename, которач учитывает область видимости ппременной.

alexsumin
Автор

38:18 зачем использовать $request->withAttribute(), если get параметры итак можно достать методом $request->getQueryParams()?

jtylwfw