私は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'
]);
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ミドルウェアはリクエストの処理を許可し、それを操作します