Промежуточное программное обеспечение предоставляет удобный механизм проверки и фильтрации HTTP-запросов, входящих в ваше приложение. Например, Lithe включает промежуточное программное обеспечение, которое проверяет, аутентифицирован ли пользователь. В противном случае промежуточное программное обеспечение перенаправит пользователя на экран входа в систему. Если пользователь аутентифицирован, промежуточное программное обеспечение разрешает выполнение запроса.
В Lithe промежуточное программное обеспечение — это функции с доступом к объекту запроса ($req), объекту ответа ($res) и функции $next в цикле запроса-ответа приложения. Функция $next при вызове вызывает следующее промежуточное ПО в текущем стеке.
Функции промежуточного программного обеспечения предоставляют удобный способ проверки, фильтрации и управления входящими HTTP-запросами к вашему приложению. Они могут:
Если текущее промежуточное программное обеспечение не завершает цикл запрос-ответ, оно должно вызвать $next(), чтобы передать управление следующему промежуточному программному обеспечению. В противном случае запрос останется на рассмотрении.
Следующий код демонстрирует элементы функции промежуточного программного обеспечения:
$app->use(function ($req, $res, $next) { $next(); });
Где:
Вот простой пример промежуточного программного обеспечения под названием myLogger. Это промежуточное программное обеспечение печатает сообщение LOGGED каждый раз, когда через него проходит запрос. Он определяется как функция, присвоенная переменной myLogger:
$myLogger = function ($req, $res, $next) { echo 'LOGGED'; $next(); };
Обратите внимание на вызов $next() выше. Эта функция вызывает следующее промежуточное программное обеспечение в приложении. $next() не является встроенной функцией PHP или Lithe, но является третьим аргументом, передаваемым функции промежуточного программного обеспечения. Хотя $next() может называться как угодно, по соглашению она всегда называется «next». Чтобы избежать путаницы, придерживайтесь этого соглашения.
Представьте себе промежуточное программное обеспечение как серию «уровней», через которые проходят HTTP-запросы, прежде чем достичь вашего приложения. Каждый уровень может проверить или отклонить запрос.
Чтобы загрузить промежуточное программное обеспечение, вы вызываете метод use() класса \Lithe\App, указывая функцию промежуточного программного обеспечения. Например:
$app = new \Lithe\App; $myLogger = function ($req, $res, $next) { echo 'LOGGED'; $next(); }; $app->use($myLogger); $app->get('/', function ($req, $res, $next) { $res->send('Hello World!'); });
Каждый раз, когда приложение получает запрос, будет напечатано сообщение «LOGGED». Порядок загрузки промежуточного программного обеспечения имеет значение: сначала выполняются те, которые загружены первыми.
Промежуточное ПО myLogger просто печатает сообщение, а затем передает запрос следующему промежуточному ПО с помощью $next().
Приложение Lithe может использовать следующие типы промежуточного программного обеспечения:
Вы прикрепляете промежуточное ПО уровня приложения к экземпляру приложения с помощью методов use() или METHOD(), где METHOD относится к методу HTTP (например, GET, PUT, POST) в нижнем регистре.
В этом примере показано промежуточное ПО без пути. Промежуточное ПО запускается каждый раз при получении запроса:
$app->use(function ($req, $res, $next) { echo 'Hello World!'; $next(); });
В приведенном ниже примере промежуточное ПО обрабатывает запрос GET к пути /user/:id:
$app->get('/user/:id', function ($req, $res, $next) { if ($req->param('id') === '0') { return $next(); } $res->send('ID is not 0'); }, function ($req, $res) { $res->send('regular'); });
Промежуточное ПО уровня маршрутизатора работает как промежуточное ПО уровня приложения, но прикрепляется к экземпляру \Lithe\Http\Router:
$router = new \Lithe\Http\Router;
Промежуточное ПО уровня маршрутизатора загружается с помощью функций use() и METHOD().
Вот пример промежуточного программного обеспечения на уровне маршрутизатора:
$router = new \Lithe\Http\Router; $router->use(function ($req, $res, $next) { echo 'Time: ', Date('H:i:s'), '
'; $next(); }); $router->get('/user/:id', function ($req, $res, $next) { if ($req->param('id') === '0') { $res->redirect('/'); } $next(); }, function ($req, $res) { echo $req->param('id'); $res->render('special'); }); $app->use('/api', $router);
Вы можете использовать стороннее промежуточное программное обеспечение, чтобы добавить функциональность вашим приложениям Lithe. Установите необходимый модуль PHP, а затем загрузите его на уровне приложения или маршрутизатора.
Вот пример загрузки промежуточного программного обеспечения сеанса с помощью \Lithe\Middleware\Session\session:
use function Lithe\Middleware\Session\session; $app = new \Lithe\App; $app->use(session([ 'secure' => true ]));
Список стороннего промежуточного ПО, обычно используемого с Lithe, можно найти на ресурсе «Стороннее промежуточное ПО».
Если вам нужно, чтобы ваше промежуточное программное обеспечение было настраиваемым, вы можете создать функцию, которая принимает массив опций или других параметров, а затем возвращает реализацию промежуточного программного обеспечения на основе этих параметров. См. пример ниже:
Теперь вы можете использовать промежуточное ПО с пользовательскими конфигурациями:
$app->use(my_middleware(['option1' => '1', 'option2' => '2']));Для создания промежуточного программного обеспечения, которое другие разработчики могут установить через Composer, существует пакет под названием lithemod/flow. Он предоставляет интерфейсы и утилиты для обработки HTTP-запросов и ответов в Lithe, что облегчает создание стандартизированных и готовых к использованию промежуточных программ для различных приложений.
lithemod/flow помогает создавать надежные промежуточные программы, предоставляя унифицированный интерфейс для запросов и ответов, что делает разработку более эффективной и организованной. Это упрощает интеграцию вашего промежуточного программного обеспечения в другие проекты и гарантирует соответствие кода согласованным стандартам.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3