PSR-7 фреймворк: Контейнер внедрения зависимостей

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

Исходный код на GitHub

Для более комфортного просмотра откройте скринкаст на YouTube, разверните видео до оригинального размера значком и поставьте скорость 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 - Подведение итогов

  1. Структура и работа с HTTP
  2. Контроллеры и маршрутизация
  3. Middleware и Pipeline
  4. Контейнер внедрения зависимостей
  5. Шаблонизаторы и вёрстка
  6. Обновление до PSR-15, вывод ошибок и логирование
  7. Консольные команды, базы данных и ресурсы

Задавайте вопросы в комментариях. Заранее спасибо и до встречи в следующем видео!

Комментарии

 

Олег

Здравствуйте, подскажите когда начнется мастер-класс по 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, так как он просто существует в проекте, хотя его и нет в контейнере, а мы хотели поместить его в контейнер, если его нет в контейнере.

Ответить

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

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


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





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