web-dev-qa-db-ja.com

Laravel 5パッケージサービスプロバイダーからのミドルウェアの登録

Laravel 5。
私のパッケージにはカスタムミドルウェアが含まれており、それをパッケージサービスプロバイダーのカーネルクラスの$routeMiddlewarearrayに追加したいと思います。
しかし、これを行う方法を見つけることができないようです。

カーネルクラスを拡張するカスタムクラスを作成しようとしたところ、配列と配列をマージできました。
しかし、コンストラクターから出ると、それは不可能です。

L4にはApp :: middlewareがありましたが、その関数はL5では使用できなくなりました。

この問題を解決した人は誰でも私を解決するのに役立ちますか?

私の質問が十分に明確でない場合は教えてください。少し明確にすることができます。

15
Joren Van Hocht

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

パッケージサービスプロバイダーでは、次のようにルーターインスタンスにアクセスできます。

$this->app['router']

次に、次のようにミドルウェアを登録できます。

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

このコードをサービスプロバイダーのregisterメソッドに配置します。

14
Joren Van Hocht

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

パッケージミドルウェアを登録するには2つの方法があります。

最初の方法は、次の方法でミドルウェアを既存のミドルウェアグループにプッシュすることです。

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

そしてもう1つの方法は、カスタムミドルウェアを登録し、そのグループにミドルウェアを割り当てることです。

$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

0
Agil

これを行うには、次の2つの方法があります。

  • 一般的なミドルウェアプロバイダー内にミドルウェアを登録する
  • パッケージサービスプロバイダー内にミドルウェアを登録する

最初にcreateでsrcパッケージフォルダーのTestMiddleware.phpファイルを試して、どこかに配置してみましょう。私の場合は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
 ]);

ミドルウェアをパッケージサービスプロバイダーに追加

2番目の方法では、ミドルウェアを作成し、最後の例のようにオートローダーにロードしてから、サービスプロバイダーを作成し、ブートメソッド内にミドルウェアを登録します。

public function boot()
{
        $this->app->middleware([
               \Vendor\Package\Middleware\TestMiddleware::class
        ]);
}

最後に、メインプロジェクト内でサービスプロバイダーを登録する必要があります(ルーメンの例)

  $app->register(Vendor\Package\TestServiceProvider::class);
0
Mehdi Hosseini