2016-10-25 13 views
0

http://www.slimframework.com/docs/concepts/middleware.htmlには、ミドルウェアをアプリケーション、ルート、またはグループに追加できます。スリムルートからミドルウェアを除外する

ミドルウェアをすべてのルート(つまりアプリケーション)に追加する方法はありますが、特定のルートから除外する方法はありますか?

EDIT。可能な解決策として、アプリケーションミドルウェアにミドルウェア機能をバイパスするロジックを追加することを考えています。メソッドの取得は$request->getMethod()を使用すれば十分ですが、http://www.slimframework.com/docs/objects/request.htmlで記述されている他のURLメソッドはミドルウェアでは使用できません。

+0

このようなことをお考えですか? http://stackoverflow.com/a/40114351/4244993 – jmattheis

答えて

0

次のようにミドルウェア内のuriにアクセスできます。 $uriあなたはミドルウェアから除外するパスと一致した場合は、早期のミドルウェアから復帰することができ、その情報に基づいて

$uri = $request->getUri()->getPath(); 

0

ルートグループ、サンプル管理ルートグループ、ユーザーグループにミドルウェアを追加する必要があると思います。 ダイナミックの動作を変更したい場合は、特定のリクエストをチェックするためにミドルウェアロジックを変更する必要があります。 サンプルでは、​​クライアントが要求のタイプを設定した場合、JSONが返されます。

EDIT:

$app = new \Slim\App(); 

//pass $app to middleware 
$app->add(function ($request, $response, $next) use ($app) { 
    //do what you want with $app. 
    //reads config file with routes for exclude 
    $response = $next($request, $response); 
    return $response; 
}); 

$app->get('/', function ($request, $response, $args) { 
    $response->getBody()->write(' Hello '); 

    return $response; 
}); 

$app->run(); 
+0

Thanks Hardy、ミドルウェア内でどのように特定のリクエストをチェックするのか知っていますか?具体的には、パスを探します。 – user1032531

0

あなたがグローバルなミドルウェアを追加したい場合は、これを達成するための最も簡単な方法は次の通りです。

$app->group('', function() { 

    //Add your routes here, note that it is $this->get() ... etc inside the closure 

})->add(MyNewMiddlewareClass::class); 
+0

何ですか? '' $ app-> add(MyNewMiddlewareClass :: class) ''は簡単でしょうか? – jmattheis

関連する問題