web-dev-qa-db-ja.com

Laravel 5:ルートへの前後のミドルウェア

私は2つのミドルウェアを持っています:beforeCacheとafterCache、両方ともカーネルに登録されています。

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

このようなルートを定義すると、次のようになります。

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

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

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

これでは5.1を使用していると想定しますが、基本的には、ルート上に属性の配列を定義しようとしています。角かっこ[]は、array(...)ということわざの省略形です。

ドキュメント( http://laravel.com/docs/5.1/middleware#defining-middleware )から、特にミドルウェアの前/後は、特定の方法を返す必要があります。

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

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'
]);
19
Sieabah
class BeforeMiddleware implements Middleware {

    public function handle($request, Closure $next)
    {
        // Do Stuff
        return $next($request);
    }

}

class AfterMiddleware implements Middleware {

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

}

1-beforeミドルウェアが動作してからリクエストを渡します。

2-beforeミドルウェアはリクエストの処理を許可し、それを操作します

4
Mahendra