caseycs/writing-own-php-framework

6. middleware

Closed this issue · 1 comments

Идея заключается в том, чтобы иметь возможность "оборачивать" вызов контроллеров каким-то кодом "до" и "после". Например: чтобы авторизовать пользователя.

Технически это должно выражаться в том, чтобы для роута мы бы могли задавать набор классов (от 0 до сколько угодно), которые будут реализовывать интерфейс MiddlewareInterface.

Т.к. у нас два "хука" (до и после), логично что у нас будет и два метода - скажем before и after.

FrontController должен уметь вызвать все нужные before до getHtml контроллера, и все after - после.

Что мы договорились сделать к четвергу: в коде, к которому мы пришли на занятии, middleware - это массив, мы его присвоили роуту, добросили до FrontController. Осталось:

  • сделать чтобы это был не массив, а объект класса MiddlewareInterface, необязательный (?MiddlewareInterface $middleware = null)
  • обновить интерфейс раутов, отразить там метод получения middleware (также с жестким указанием типа)
  • добавить в интерфейс middleware метод before (Request $request):void (void означает что метод ничего не возвращает)
  • написать класс middleware, у которого метод before стартует сессию
  • вызывать метод before у middleware перед запуском контроллера (если middleware есть)
  • убедиться что все работает - и для Route, и для Route2, и когда middleware есть и когда его нет