Вопрос:

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

php package laravel-5 service-provider laravel-middleware

10200 просмотра

5 ответа

456 Репутация автора

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

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

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

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

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

Автор: Joren Van Hocht Источник Размещён: 13.04.2015 07:03

Ответы (5)


14 плюса

456 Репутация автора

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

$this->app['router']

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

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

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

Автор: Joren Van Hocht Размещён: 07.09.2015 08:34

0 плюса

923 Репутация автора

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

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

Давайте сначала 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);
Автор: Mehdi Hosseini Размещён: 02.03.2016 11:28

20 плюса

365 Репутация автора

Начиная с 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);
Автор: mitchdav Размещён: 24.03.2017 02:21

6 плюса

81 Репутация автора

Это про 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);
}
Автор: Alexandr Shevchenko Размещён: 19.04.2018 01:04

0 плюса

170 Репутация автора

Существует два способа регистрации вашего промежуточного программного обеспечения.

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

   $this->middlewareGroup($group_name, $middleware_list)

И другой способ - зарегистрировать пользовательское промежуточное ПО и назначить ваше промежуточное ПО для этой группы.

$this->pushMiddlewareToGroup(*string* $group_name, $middleware_list)

Вы можете узнать больше по ссылкам ниже

middlewareGroup:
https://laravel.com/api/5.5/Illuminate/Routing/Router.html#method_middlewareGroup

pushMiddlewareToGroup: https://laravel.com/api/5.5/Illuminate/Routing/Router.html#method_pushMiddlewareToGroup

Автор: Agil Размещён: 11.08.2019 08:31
Вопросы из категории :
32x32