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);