Laravel 5。
私のパッケージにはカスタムミドルウェアが含まれており、それをパッケージサービスプロバイダーのカーネルクラスの$routeMiddleware
arrayに追加したいと思います。
しかし、これを行う方法を見つけることができないようです。
カーネルクラスを拡張するカスタムクラスを作成しようとしたところ、配列と配列をマージできました。
しかし、コンストラクターから出ると、それは不可能です。
L4にはApp :: middlewareがありましたが、その関数はL5では使用できなくなりました。
この問題を解決した人は誰でも私を解決するのに役立ちますか?
私の質問が十分に明確でない場合は教えてください。少し明確にすることができます。
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);
パッケージサービスプロバイダーでは、次のようにルーターインスタンスにアクセスできます。
$this->app['router']
次に、次のようにミドルウェアを登録できます。
$this->app['router']->middleware('middlewareName', 'your\namespace\MiddlewareClass');
このコードをサービスプロバイダーのregisterメソッドに配置します。
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);
}
パッケージミドルウェアを登録するには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
これを行うには、次の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);