のshow($id)
メソッドがルートにヒットしました。コントローラメソッドではないメソッドからレスポンスを送信する方法は?
public function show($id)
{
// fetch a couple attributes from the request ...
$this->checkEverythingIsOk($attributes);
// ... return the requested resource.
return $response;
}
は今、checkEverythingIsOk()
に、私はいくつかの検証と承認のものを実行します。これらのチェックは、同じコントローラ内の複数のルートに共通しているので、これらのチェックを抽出し、同じ操作を実行する必要があるたびにメソッドを呼び出したいと思います。
問題は、私はこの方法からいくつかの応答を送信することができませんよ、次のとおりです。
private function checkEverythingIsOk($attributes)
{
if (checkSomething()) {
return response()->json('Something went wrong'); // this does not work - it will return, but the response won't be sent.
}
// more checks...
return response()->callAResponseMacro('Something else went wrong'); // does not work either.
dd($attributes); // this works.
abort(422); // this works too.
}
注:はい、私は一般的なものに知っては前にチェックを実行するミドルウェアや検証サービスを使用することができます要求はコントローラにヒットしますが、私はしたくありません。私はこのようにする必要があります。おそらく、この探している
エラーメッセージの応答形式は、すべてのエラータイプで同じではありません。時には、データベースから他のデータをフェッチする応答マクロを呼びたいときもありますが、メッセージを印刷したり、中止したりするときには、他の時も使用します。 – hallaplay835
'return $ this-> checkEverythingIsOk($ attributes); '? 'dd()'と 'abort()'はとにかくスクリプトの実行をキャンセルします。すべてが正常であれば 'null'を返し、そうでなければレスポンスを返すことができます。コントローラメソッドで単純なチェックを行います。 – Voyowsky