14

beforeCache と afterCache の 2 つのミドルウェアがあり、どちらもカーネルに登録されています。

これらを次の順序でルートに呼び出したい: 1. beforeCache 2. myController 3. afterCache

次のようなルートを定義すると:

Route::get('especies/{id}', [
    'middleware' => 'beforeCache', 
    'uses' => 'MyController@myMethod', 
    'middleware' => 'afterCache', 
]);

afterCache が同じ配列キー ミドルウェアを再定義しているため、 beforeCache は実行されません。

どうすればいいですか?ありがとう!

4

2 に答える 2

28

ここでは 5.1 を使用していると仮定しますが、実際に行っているのは、ルート上で属性の配列を定義しようとしていることです。括弧 [] は、array(...) の省略形です。

ドキュメント(http://laravel.com/docs/5.1/middleware#defining-middleware)から、具体的にはミドルウェアの前/後から、特定の方法を返すだけで済みます。

Before middlewares の場合、コードを実行し、コードの実行後に次のリクエストを返します。

public function handle($request, Closure $next)
{
    // Perform action

    return $next($request);
}

After ミドルウェアの場合、残りのリクエストを処理してからコードを実行し、最後にレスポンスを返します。

public function handle($request, Closure $next)
{
    $response = $next($request);
    // Perform action
    return $response;
}

ルートは次のようになります。

Route::get('especies/{id}',[
    'middleware' => [
        'beforeCache',
        'afterCache'
    ],
    'uses' => 'MyController@myMethod'
]);
于 2015-07-09T15:59:08.603 に答える