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

ссылка на исходник

 

Начнём с того, что мы используем механизм для фильтрации HTTP-запросов приложения – Middleware. С его помощью можно выполнять код до и после запуска приложения, для управления объектами Request и Response.

Как пример: авторизация до запуска самого приложения. Middleware сделает редирект на нужный контент в случае успешной авторизации, либо вернёт на страницу авторизации при неудаче.

Итак, создадим новый родительский класс Middleware, с доступом к элементам контейнера через свойство $container

От него унаследуем класс ValidationErrorMiddleware с «магическим» методом __invoke, который вызывается, когда скрипт пытается выполнить объект как функцию. Middleware в Slim принимает 3 аргумента: объекты Request, Response и следующий Middleware.

Slim добавляет Middleware как слои вокруг приложения. Когда запускается приложение то объекты Request и Response проходят сквозь эти слои снаружи дойдя до самого приложения, после чего приложение отправляет соответствующий маршрут и результирующий объект Response проходит все слои Middleware, но уже изнутри.

Чтобы использовать класс в качестве промежуточного слоя необходимо воспользоваться методом ->add()

Запускаем приложение. Отрабатывает Middleware. Появилась ошибка сигнализирующая о том, что Middleware должен вернуть объект Response

Как мы помним, Middleware в Slim выполняется последовательно по слоям, каждый следующий слой принимает объекты Request, Response и возвращает уже обработанный Response.

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

 

 

В методе validate активизируем глобальную переменную сессии errors

Далее делаем доступным переменную error для twig шаблонов и очищаем суперглобальную переменную.

Для проверки работы шаблонизатора с массивом ошибок errors можно добавить следующий код:

{{ errors | json_encode }}

Проверяем:

Теперь добавим в шаблон код изменения классов элементов в зависимости от наличия данных в массиве errors

Добавляем выделенный выше код всем элементам требующим валидации

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

Отлично, теперь допишем дополнительный метод для валидации email