Как реализовывается паттерн Middleware в контексте php?

Впервые встретил Middleware в laravel, на сколько я понял принцип работы, то он заключается в передаче запроса(request), от одного middleware к другому, изменяя ответ(response). Хотел где нибудь найти пример простой реализации, но обычно натыкался на пример из фреймвороков. Может кто нибудь может показат простой пример? Важен ли порядок middleware? Например как будет работать middleware выполняющий работу роутера?
  • Вопрос задан
  • 4410 просмотров
Пригласить эксперта
Ответы на вопрос 1
orlov0562
@orlov0562 Куратор тега PHP
I'm cool!
Да все просто:

1) Простой пример

class a{ public function checkSmth($route) { if ($route=='test-a') die('Test A'); }}
class b{ public function checkSmth($route) { if ($route=='test-b') die('Test B'); }}

$middleware = ['a','b'];

$route = 'test-a'; // например тут будет $_SERVER['QUERY_STRING']

foreach($middleware as $m) (new $m)->checkSmth($route);

т.е. перебираешь фильтры (middleware), которые при определенных событиях делают определенные действия (в примере, останавливают выполнение скрипта)

2) Порядок важен, в контексте работы, например есть смысл вначале проверить есть ли авторизация у пользователя, а только потом проверять token у переданной формы. Если нет такого требования, то и порядок не важен, например если редиректить женщин и стариков, в другой раздел, то вполне можно в одном middleware проверять возраст, а в другом пол, при этом порядок не важен.

3) Реализовывать можно по-разному, ориентируясь на свои требования. Чаще всего, middleware это набор объектов которые возвращает true для is_callable и выполняют какие либо действия по анализу переданных в них данных.

Как-то так..
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы