19

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

Kernel クラスを拡張するカスタム クラスを作成しようとしましたが、配列を自分の配列とマージできます。
しかし、コンストラクタの外に出ると、それは不可能です。

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

この問題を解決した人は、私がこれを解決するのを手伝ってくれますか?

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

4

6 に答える 6

13

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

$this->app['router']

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

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

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

于 2015-09-07T08:34:22.543 に答える
0

これは、次の 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 番目の方法では、ミドルウェアを作成し、最後の例のようにオートローダーにロードしてから、サービス プロバイダーを作成し、ミドルウェアを boot メソッド内に登録します。

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

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

  $app->register(Vendor\Package\TestServiceProvider::class);
于 2016-03-02T11:28:26.177 に答える