В настоящее время я разрабатываю пакет в / для Laravel 5.
Мой пакет содержит пользовательское промежуточное ПО, и я хотел бы добавить его в $routeMiddleware
массив класса Ядро из в моем пакете поставщика услуг.
Но я не могу найти способ сделать это.
Я попытался создать собственный класс, который расширяет класс Kernel, и затем я могу объединить массив с моим массивом.
Но выйти из конструктора невозможно.
В L4 у вас был App :: middleware, но эта функция больше не доступна в L5.
Может ли кто-нибудь, кто решил эту проблему, помочь мне решить эту проблему?
Пожалуйста, скажите мне, если мой вопрос недостаточно ясен, чтобы я мог немного его уточнить.
Для тех, кто ищет обновленный ответ, в Laravel 5.4 вы должны позвонить по следующей линии от поставщика услуг.
$this->app['router']->aliasMiddleware('scopes', \Modules\Auth\Http\Middleware\CheckScopes::class);
Или вы можете использовать помощник app (), как показано ниже.
app('router')->aliasMiddleware('scopes', \Modules\Auth\Http\Middleware\CheckScopes::class);
В вашем поставщике услуг пакета вы можете получить доступ к экземпляру маршрутизатора следующим образом:
$this->app['router']
Далее вы можете зарегистрировать промежуточное ПО следующим образом:
$this->app['router']->middleware('middlewareName', 'your\namespace\MiddlewareClass');
Вы помещаете этот код в метод регистрации вашего поставщика услуг.
Это про 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);
}
Вы можете сделать это двумя способами:
давайте попробуем сначала один 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);