ссылка на видео

 

В данной части мы научимся использовать элементы контейнера в контроллерах, а именно ранее созданный элемент view, который обеспечивает нам связь с шаблонизатором Twig.

строка 36 - вносим изменения в элемент контейнера HomeController – добавим зависимость от элемента контейнера view.

 

 

Далее отредактируем файл HomeController.php

Добавим свойство $view и инициализируем его через конструктор, в конструкторе также указываем тип $view должен соответствовать \Slim\Views\Twig именованный выше как View.

В методе index возвращаем результат вызова определённого в шаблонизаторе метода render с определёнными в нём параметрами.

Проверяем работу сайта

 

Итак, мы смогли связать два класса посредством DI, но пока можем использовать лишь один элемент контейнера – view из контроллера. Для доступа ко всему контейнеру внесём следующие изменения:

Создадим базовый контроллер, от которого будут наследоваться все контроллеры. Пропишем свойство $container с инициализацией через конструктор.  В HomeController.php удалим конструктор и свойство $view, так как формально оно должно инициализироваться посредством базового контроллера через $container

 

 

 

В файле app.php оставим передаваемый параметр $container.

Теперь HomeController должен выглядеть так как показано ниже, т.е. view вызывается через $container.

Проверяем:

 

 

Приступим к следующему шагу.

Если мы хотим использовать:

$this->view

вместо

$this->container->view,

нам необходимо воспользоваться magic методом __get()

Метод __get() будет выполнен при чтении данных из недоступных свойств. В качестве входящих данных ему передаётся имя свойства, для его именования мы используем переменную $property, и выполняем проверку на присутствии данного элемента в контейнере.

Вносим исправления в HomeController.php,

$this->view->render(.., ..);

 

Проверяем работу сайта: