Laravel 5 зарегистрировать промежуточное ПО из пакета услуг поставщика

В настоящее время я разрабатываю пакет в / для Laravel 5.
Мой пакет содержит пользовательское промежуточное ПО, и я хотел бы добавить его в $routeMiddlewareмассив класса Ядро из в моем пакете поставщика услуг.
Но я не могу найти способ сделать это.

Я попытался создать собственный класс, который расширяет класс Kernel, и затем я могу объединить массив с моим массивом.
Но выйти из конструктора невозможно.

В L4 у вас был App :: middleware, но эта функция больше не доступна в L5.

Может ли кто-нибудь, кто решил эту проблему, помочь мне решить эту проблему?

Пожалуйста, скажите мне, если мой вопрос недостаточно ясен, чтобы я мог немного его уточнить.

11

Решение

Для тех, кто ищет обновленный ответ, в 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);
15

Другие решения

В вашем поставщике услуг пакета вы можете получить доступ к экземпляру маршрутизатора следующим образом:

$this->app['router']

Далее вы можете зарегистрировать промежуточное ПО следующим образом:

$this->app['router']->middleware('middlewareName', 'your\namespace\MiddlewareClass');

Вы помещаете этот код в метод регистрации вашего поставщика услуг.

14

Это про 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);
}
3

Вы можете сделать это двумя способами:

  • Зарегистрируйте ваше промежуточное ПО внутри вашего основного поставщика промежуточного ПО
  • Зарегистрируйте промежуточное ПО внутри вашего поставщика услуг

давайте попробуем сначала один 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);
0
По вопросам рекламы [email protected]