私はLaravel 5でREST APIを構築しています。LaravelコントローラからAJAXエラーを返すには?
Laravel 5では、特定のルートを処理する前に満たさなければならない検証ルールを定義するためにサブタイプApp\Http\Requests\Request
をサブクラス化できます。例えば:
<?php
namespace App\Http\Requests;
use App\Http\Requests\Request;
class BookStoreRequest extends Request {
public function authorize() {
return true;
}
public function rules() {
return [
'title' => 'required',
'author_id' => 'required'
];
}
}
クライアントは、AJAXリクエストを介して、対応するルートをロードし、そしてBookStoreRequest
要求がルールを満たさない場合、それは自動的にJSONオブジェクトとしてエラー(複数可)を返すことを発見した場合。たとえば、次の要求が既に受け付け、コントローラに渡された後
{
"title": [
"The title field is required."
]
}
しかし、Request::rules()
方法のみ検証することができ、入力および入力が有効な場合でも、エラーの他の種類が発生する可能性があります。たとえば、のは、コントローラは、いくつかのファイルに新しい書籍情報を書き込む必要があるとしましょう理由-が、ファイルを開くことができません。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Http\Requests\BookCreateRequest;
class BookController extends Controller {
public function store(BookStoreRequest $request) {
$file = fopen('/path/to/some/file.txt', 'a');
// test to make sure we got a good file handle
if (false === $file) {
// HOW CAN I RETURN AN ERROR FROM HERE?
}
fwrite($file, 'book info goes here');
fclose($file);
// inform the browser of success
return response()->json(true);
}
}
もちろん、私はちょうどdie()
できたが、それは超醜いです。検証エラーと同じ形式でエラーメッセージを返すことをお勧めします。このように:
独自のJSONオブジェクトを作成して返すことができますが、確かにLaravelはこれをネイティブにサポートしています。
これを行うにはどのような方法が最適ですか?または、Laravel REST APIのランタイム(検証時ではなく)エラーを返すためのより良い方法がありますか?
あなたは 'return response() - > json(['error' => 'あなたのカスタムメッセージ'])を実行できません。 –
カスタムjsonレスポンスクラス – Digitlimit
をビルドすることができます。 'return response() - > json()'は200 OKを返します。適切な200以外の応答コード(例:500 Internal Server Error)を使用したいええ、私も手書きで書くことができました - 私はLaravelがこれを行うための組み込みの、より構造化された方法をすでに提供していると仮定しました。たぶんそれは間違った前提です。 – greenie2600