6. middleware
Closed this issue · 1 comments
caseycs commented
Идея заключается в том, чтобы иметь возможность "оборачивать" вызов контроллеров каким-то кодом "до" и "после". Например: чтобы авторизовать пользователя.
Технически это должно выражаться в том, чтобы для роута мы бы могли задавать набор классов (от 0 до сколько угодно), которые будут реализовывать интерфейс MiddlewareInterface
.
Т.к. у нас два "хука" (до и после), логично что у нас будет и два метода - скажем before
и after
.
FrontController
должен уметь вызвать все нужные before
до getHtml
контроллера, и все after
- после.
caseycs commented
Что мы договорились сделать к четвергу: в коде, к которому мы пришли на занятии, middleware - это массив, мы его присвоили роуту, добросили до FrontController. Осталось:
- сделать чтобы это был не массив, а объект класса MiddlewareInterface, необязательный (
?MiddlewareInterface $middleware = null
) - обновить интерфейс раутов, отразить там метод получения middleware (также с жестким указанием типа)
- добавить в интерфейс middleware метод
before (Request $request):void
(void
означает что метод ничего не возвращает) - написать класс middleware, у которого метод
before
стартует сессию - вызывать метод before у middleware перед запуском контроллера (если middleware есть)
- убедиться что все работает - и для Route, и для Route2, и когда middleware есть и когда его нет