PSR-7 фреймворк: Контейнер внедрения зависимостей
Четвёртый урок серии скринкастов по изучению PSR-7 микрофреймворков в PHP. Разрабатываем систему управления конфигурацией приложения и автоматизируем внедрение зависимых объектов и параметров в сервисы:
Для более комфортного просмотра откройте скринкаст на YouTube, разверните видео до оригинального размера значком 
 и поставьте скорость 1,75:
 и поставьте скорость 1,75:

Содержание:
- 00:00:00 - Вступление, повторение выводов предыдущего урока
- 00:07:59 - Составление плана урока
- 00:12:20 - Ответ на вопрос: почему не используют фреймворки?
- 00:15:36 - Как подключается база данных
- 00:18:58 - Теория централизованной системы конфигурации
- 00:20:33 - Объект Config
- 00:27:08 - IndexAction блога
- 00:28:02 - ShowAction блога
- 00:30:24 - Секции params и definitions
- 00:33:23 - Переименование Config в Container
- 00:35:51 - Секции Initialization и Configuration
- 00:37:34 - ContainerTest
- 00:41:24 - ServiceNotFoundExeption
- 00:45:40 - Ленивая загрузка объектов
- 00:50:01 - Поддержка анонимных функций
- 00:55:56 - Кешировование готовых объектов
- 01:01:28 - Разделение конфигурирования от фабрик объектов
- 01:08:09 - Компонент Mailer
- 01:09:06 - Внедрение завизисимостей в IndexAction
- 01:14:25 - Работа с контейнером как с массивом
- 01:17:08 - Pimple\Container
- 01:18:40 - Группировка параметров
- 01:24:32 - Использование имён классов вместо псевдонимов
- 01:28:22 - Перенос объектов проекта в контейнер
- 01:44:51 - Конфигурирование маршрутов через приложение
- 01:54:33 - AuraRouterAdapter
- 02:00:08 - RouteData
- 02:04:58 - Промежуточные итоги, разделение файла index.php
- 02:11:40 - Перенос вызова контейнера в Resolver
- 02:16:22 - MiddlewareResolverTest
- 02:17:06 - DummyContainer
- 02:21:41 - Возможность автосоздания объектов в контейнре
- 02:29:05 - Метод has()
- 02:31:22 - Автораспознавание конструкторов
- 02:33:55 - Рефлексия
- 02:41:40 - ContainerTest
- 02:46:27 - Значения по умолчанию
- 02:53:39 - Передача конфигурации массивом
- 02:56:45 - Проблема повторного использования
- 02:59:20 - ContainerInterface
- 03:00:45 - NotFoundExeptionInterface
- 03:01:57 - PHP-FIG PSR-11 Container Interface
- 03:08:57 - Поиск библиотек на Packagist
- 03:11:19 - Zend Service Manager
- 03:31:57 - Конфигурация массивом через конструктор
- 03:37:08 - Интеграция в проект
- 03:39:28 - ReflectionBasedAbstractFactory
- 03:44:15 - Разделение конфигурации на файлы
- 03:46:52 - Использование локальных параметров
- 03:48:46 - Обход файлов через glob
- 03:53:47 - Недостатки функции array_merge_recursive
- 03:56:35 - Использование Zend Config Aggregator
- 04:02:41 - Подведение итогов
- Структура и работа с HTTP
- Контроллеры и маршрутизация
- Middleware и Pipeline
- Контейнер внедрения зависимостей
- Шаблонизаторы и вёрстка
- Обновление до PSR-15, вывод ошибок и логирование
- Консольные команды, базы данных и ресурсы
Задавайте вопросы в комментариях. Заранее спасибо и до встречи в следующем видео!
 
        
ОлегЗдравствуйте, подскажите когда начнется мастер-класс по Laravel? Какую версию 5.4 или 5.5 будете использовать, и что проектировать, спасибо!
ЕвгенийДобрый день Дмитрий!
Есть ли у Вас какой-нибудь материал по принципу "Классы должны быть открыты для расширения, но закрыты для изменения"?
Учите ли вы проектировать такие классы без использования патернов ООП?
Дмитрий ЕлисеевЕсть, напимер, слайды с мастер-класса по разработке гибких компонентов, где разобран один из примеров с корзиной из интенсива по ООП.
ЕвгенийСпасибо!
Arunas – www.arvidija.ltБудет защищат Ваш Фрамеворк сайт от атак DDOS - многократных
(напр. 100раз/сек) запросов от одного IP к сайту?
АлександрНа 4 часа растянуть 30-минутную тему - у вас и впрямь талант...
Совет людям на будущее - если есть желание написать свой простой контейнер с рефлексией: посмотрите исходники контейнера laravel - он просто до безобразия. 2 файла - контейнер и резолвер.
Чтобы понять его принцип - понадобиться 20 минут. Ибо пролистав видео автора 20 минут - толком ничего не понял, 99% воды, а уж если есть хоть один человек, который полностью просмотрел видео - может попросить у автора медаль за выдержку...
Павел Агейчикс заявлением 99% воды вы пережестили
деталей действительно много, даже тех, которые можно и опустить, но это точно не вода
если у вас цель просто побыструхе вырвать идею из контекста, прилепить ее к своему очередному "чудовищу Франкенштейна" и забыть, тогда вам стоит поискать фастфуд в других местах, здесь его нет
у Дмитирия четкий последовательный и систематический подход к преподаванию, что лично мне очень нравится, думаю и остальным, кто постоянно читает его блог и проходят его курсы
да, нужно посидеть и разобраться, но это хорошая инвестиция, которая окупится
ни разу не пожалел за время потраченное ни за бесплатные уроки ни за платные курсы
АлександрБот детектед.
Павел Агейчик"мощный аргумент" чтобы игнорировать чужое мнение (facepalm)
Максим Федоровну если смотреть не понятно, то и материал будет не понятным
АлексейЗдравствуйте Дмитрий, работа с сессиями будет рассматриваться в контексте данного мастер класса?
Andrew TorwПланируются ли ещё видео по архитектуре YII 2?
АртёмМетод has() Вашего контейнера - неверен: он должен вернуть булев, если запрашиваемый ключ принадлежит ИМЕННО контейнеру, потому что метод has() находится в контейнере, он должен проверить, есть ли уже в контейнере такая зависимость, в Вашем случае, если в контейнере нет такого ключа, но в проекте есть такой класс, то метод has() вернёт - true, что вводит в заблуждение, так как if (!$container->has(Test::class)) $container->set(Test::class, new Test()) не поместит в контейнер класс Test, так как он просто существует в проекте, хотя его и нет в контейнере, а мы хотели поместить его в контейнер, если его нет в контейнере.