「ミドルウェアの前」でアクションを取り消し、コントローラを実行せずにクライアントに応答を送信する方法が見つかりませんでした。例えばミドルウェアキャンセルルートの前のSilexアプリケーション
:
$app->before(function(Request $request) {
// Do something here
// ...
// Here sent the response to the client and don't execute the controller
}});
は可能ですか?
一例
このコードは正常に動作します。私はフレームワークの組み込みメソッドを使用して別のソリューションを探しています。可能な場合は問題ありません。
$app->before(function(Request $request) {
// Do something here
// ...
header('Content-Type: application/json');
echo json_encode(array(
'message' => 'Invalid token'
));
http_response_code(400); // This code return Bad Request to client
exit; // Cancel the rest of the framework
}});
あなたのお返事ありがとうございます。しかし私の意図は、クライアントに4XXステータスコードを返す要求を取り消すことです。このメソッドを使用すると、結果は他のコントローラによって生成されたボディを持つステータスコード200になります。おそらく、私のアイデアが間違っているか、そのアプローチが無効です。 –
どこから脱出して4xxコードを返すかは、例外を使用してください。私は私の答えを編集しました。 –
Horst Jahns、ありがとうございます。あなたのソリューションは私のアプローチには完璧です。よろしく –