Laravel 5 регистрирует промежуточное ПО от поставщика пакетов услуг
В настоящее время я разрабатываю пакет в/для Laravel 5.
Мой пакет содержит специальное промежуточное программное обеспечение, и я хотел бы добавить его в массив $routeMiddleware
класса Kernel из моего поставщика услуг пакета.
Но я не могу найти способ сделать это.
Я попытался создать собственный класс, который расширяет класс Kernel, а затем я могу объединить массив с моим массивом.
Но однажды из конструктора это невозможно.
В L4 у вас было промежуточное ПО App::, но эта функция больше не доступна в L5.
Может ли кто-нибудь, кто решил эту проблему, помочь мне решить это?
Пожалуйста, скажите мне, если мой вопрос недостаточно ясен, так что я могу немного его прояснить.
Ответы
Ответ 1
Начиная с Laravel 5.4 (протестировано до 5.8), вы должны позвонить по следующей линии от поставщика услуг.
$this->app['router']->aliasMiddleware('my-package-middleware', \My\Package\Middleware::class);
Или вы можете использовать помощник app(), как показано ниже.
app('router')->aliasMiddleware('my-package-middleware', \My\Package\Middleware::class);
Ответ 2
В поставщике услуг пакета вы можете получить доступ к экземпляру маршрутизатора следующим образом:
$this->app['router']
Затем вы можете зарегистрировать промежуточное программное обеспечение следующим образом:
$this->app['router']->middleware('middlewareName', 'your\namespace\MiddlewareClass');
вы помещаете этот код в метод регистрации вашего поставщика услуг.
Ответ 3
Это про Laravel 5.6
/*In your package service provider*/
public function boot()
{
/** @var Router $router */
$router = $this->app['router'];
$router->pushMiddlewareToGroup('web', MyPackage\Middleware\WebOne::class);
}
Ответ 4
Вы можете сделать это двумя способами:
- Зарегистрируйте свое среднее изделие внутри вашего поставщика среднего уровня.
- Зарегистрируйте промежуточное изделие внутри своего пакета. Поставщик услуг
попробует сначала один файл create
вашего файла TestMiddleware.php в вашей папке пакета src и поместите его где-нибудь, в моем случае я разместил его внутри папки Middle-ware
, а затем добавлю его в ваш автозагрузчик composer.json например:
"autoload": {
"psr-4": {
"Vendor\\Package\\Middleware": "packages/Vendor/Package/src/Middleware"
}
}
И напишите свое общее среднее:
namespace Vendor\Package\Middleware;
class TestMiddleware {
public function handle( $request, Closure $next ) {
echo 'hello, world!';
}
}
Затем добавьте Средство в основное основное меню проекта, в Lumen вы должны добавить его следующим образом:
$app->middleware([
Vendor\Package\Middleware\TestMiddleware::class
]);
Добавление промежуточного продукта в поставщика пакетов услуг
И, во-вторых, создайте среднюю версию и загрузите ее в автозагрузчик, как в последнем примере, а затем создайте поставщика услуг и зарегистрируйте свой метод загрузки в середине:
public function boot()
{
$this->app->middleware([
\Vendor\Package\Middleware\TestMiddleware::class
]);
}
И, наконец, вы должны зарегистрировать своего поставщика услуг в своем основном проекте (пример Lumen)
$app->register(Vendor\Package\TestServiceProvider::class);