Laravel5から、HTML/Formヘルパーが標準では読み込まれなくなりました。また、普通のForm(POST)でも、csrf_tokenが要求されうようになったので、無理に使うこともないかなと。
Laravelに限らず、HTML系のHelperってあまり意味を感じないし、ここのところは、各種JS,CSSフレームワークとの連動が必要なのでむしろ邪魔です(強いて言うなら、postでdeleteする時に1行で書ける時だけ便利)。
Helperを使わない場合に遭遇する面倒なことへの対処をまとめる。
Form関連
action先の指定
action先の指定は悩ましい。action="hoge/create"などとするのが無難だが、hoge/index=/みたいに指定していた際に、相対パスが崩れてしまう(とにかくうまくいかない)。なので、url()を使う(で囲む)のが無難。
<form method="post" action="{{url('posts/create')}}" id="form_create">
csrf_tokenの送付
csrf_tokenはcsrf_token()で生成できるので、hiddenのvalueに入れて送付。
<input type="hidden" name="_token" value="{{csrf_token()}}">
idの送付
更新処理等で、
{!! Form::open(['action' => ['PostsController@postEdit', $post->id]]) !!}
という感じで送ったidは、Controller側で、
public function postEdit(Request $request,$id){}
として受けられるが、普通に
のhiddenでPOSTすると、$request->idで取得する必要がある。delete(等の際、Formで改行が入るのを直す)
多くのRESTでは、deleteはpostで受ける。ということは、Formを仕込む必要がある。これを、Helperだと、
{!! Form::open(['action' => ['PostsController@postDelete', $article->id]]) !!}
という感じで書ける。getにして、で書いてしまってもまあ、内部システムならいいかなと思うが、Formで書くと、長い。まあ、長いのはいいのだが、
はblockなので、改行が入る。こを防ぐには、styleでinlineを指定する。<form method="post" action="{{url('posts/delete')}}" style="display:inline;">
<input type="hidden" name="id" value="{{$post->id}}">
<input type="hidden" name="_token" value="{{csrf_token()}}">
<button type="submit" class="btn btn-info btn-xs btn-delete">削除</button>
</form>
とりあえず、こんな感じ。
必要に応じて随時メモる。