«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Промежуточное программное обеспечение в Lithe: как оно работает и как создать свое собственное

Промежуточное программное обеспечение в Lithe: как оно работает и как создать свое собственное

Опубликовано 8 ноября 2024 г.
Просматривать:426

Middleware in Lithe: How It Works and How to Create Your Own

Промежуточное программное обеспечение предоставляет удобный механизм проверки и фильтрации HTTP-запросов, входящих в ваше приложение. Например, Lithe включает промежуточное программное обеспечение, которое проверяет, аутентифицирован ли пользователь. В противном случае промежуточное программное обеспечение перенаправит пользователя на экран входа в систему. Если пользователь аутентифицирован, промежуточное программное обеспечение разрешает выполнение запроса.

Как промежуточное ПО работает в Lithe

В Lithe промежуточное программное обеспечение — это функции с доступом к объекту запроса ($req), объекту ответа ($res) и функции $next в цикле запроса-ответа приложения. Функция $next при вызове вызывает следующее промежуточное ПО в текущем стеке.

Функции промежуточного программного обеспечения предоставляют удобный способ проверки, фильтрации и управления входящими HTTP-запросами к вашему приложению. Они могут:

  • Выполните любой код.
  • Измените объекты запроса и ответа.
  • Завершить цикл запрос-ответ.
  • Вызов следующего промежуточного программного обеспечения в стеке.

Если текущее промежуточное программное обеспечение не завершает цикл запрос-ответ, оно должно вызвать $next(), чтобы передать управление следующему промежуточному программному обеспечению. В противном случае запрос останется на рассмотрении.


Элементы функции промежуточного программного обеспечения

Следующий код демонстрирует элементы функции промежуточного программного обеспечения:

$app->use(function ($req, $res, $next) {
    $next();
});

Где:

  • $req: аргумент HTTP-запроса, обычно называемый $req.
  • $res: аргумент ответа HTTP, обычно называемый $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 помогает создавать надежные промежуточные программы, предоставляя унифицированный интерфейс для запросов и ответов, что делает разработку более эффективной и организованной. Это упрощает интеграцию вашего промежуточного программного обеспечения в другие проекты и гарантирует соответствие кода согласованным стандартам.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/lithephp/middleware-in-lithe-how-it-works-and-how-to-create-your-own-3h67?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с Study_golang@163 .comdelete
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3