###やりたいこと
・json_encode()のようにJSONで値を返したい。
・外部サイトからPOSTを受ける際のcsrf_token()チェックを無効にしたい(する必要がある)
###JSON Response
なにも難しいことはない。
普通に配列を作って、Response::json($array)で返す。
最もシンプルな例は、こんな感じ。Content-Typeもapplication/jsonとしてくれるようだ。
Route::get('hoge',function(){
$response = array();
$response["status"] = "OK";
$response["message"] = "No problem";
return Response::json($response);
});
ajax?のリクエストでもValidator等も普通に使える。まあ当然。
public function create()
{
//
$input = \Input::all();
$rules = [
'name'=>'required',
'email'=>'required',
'password'=>'required',
];
$messages = [
'name.required'=>'name is must.',
'email.required'=>'email is must.',
'password.required'=>'password is must.',
];
$validation = \Validator::make($input,$rules,$messages);
$response = array();
if($validation->fails()){
$response['status'] = "NG";
$response['message'] = "validation error.";
return \Response::json($response);
}else{
//
//DB書き込みなどの処理
$response['status'] = "OK";
$response['message'] = "no problem.";
return \Response::json($response);
}
}
###POSTの際のcsrf_token対応
外部からPOSTされる場合、csrf_tokenのチェックを無効にする必要がある。が、どうやら、特定のRouteにだけ適用/非適用をというのができないみたい。
####全部OFFにする
app/Http/Kernel.phpの
'App\Http\Middleware\VerifyCsrfToken',
の行をコメントアウトするか消す。
特定のコントローラでのみONにするのなら、当該のコントローラのコンストラクタに、
$this->middleware('App\Http\Middleware\VerifyCsrfToken');
と書くことでONにできるらしい。が、メソッド単位では無理らしい。exceptは使えないのだろうか?そのうち試す。
###追記
Laravel5.1でexpectがサポートされるようだ(2015年5月4日)。
protected $except = [
'webhook/*'
];