プログラミング学習188日目〜Laravel 書籍で学習 5日目〜
今日はBladeテンプレートとディレクティブ。
ルートでこうした場合、
Route::get('hello','HelloController@index')->name('hello.index');
index.phpというファイルとindex.blade.phpというファイルがあった場合、どっちが優先されるか?
index.blade.phpが優先されます。
LaravelではBladeテンプレートがあるとそれが優先して読み込まれるそうです。なので、index.blade.phpがあればこちらが読み込まれ、なければindex.phpが読み込まれることになります。
動画を参考にアプリを作ったとき、あまり疑問を持たず何気に@csrfとか@ifとか使っていまして、Laravelではこんな感じでつかうんだねくらいに思っていましたが、@〜というのはディレクティブとういうBladeの機能とのこと。
今日のところは@csrfと@ifだけですが、先のページをちらっと見たところ、@isset、@empty、等などあるようです。どれもPHPで関数として使っていたのでそれほど抵抗はなさそうです。
@csrfは本当に便利というか便利すぎて、これを使えるというだけでもLaravelを使う理由になり得ると感じるくらいです。PHPですとhtmlspecialchars()とかいう呪文なような関数を使わないといけないところをLaravelならformの頭に@csrfの5文字を入れるだけでcsrf対策ができてしまいます。
//csrf対策
<form method="POST" action="/hello">
@csrf
<input type="text" name="message">
<input type="submit">
</form>
しかも@csrfを入れないとエラーになるという徹底ぶりで安全を確保できます。試しに@csrfを消してフォームの送信をしてみたら、やはりエラーが出ました。
Laravelを使わないという選択肢はない気がします。