■Bladeテンプレート
/resources/views/test.php
test: <?php echo date('Y-m-d H:i:s') ?>
※テンプレートは通常のPHP
/resources/views/test.blade.php
test: <?php echo date('Y-m-d H:i:s') ?>
<hr>
csrf: {{ csrf_field() }}
※ファイル名を変えるとbladeの記法が使える
「test.php」と「test.blade.php」の両方が存在する場合、「test.blade.php」が使われる
@extends('layouts.app')
@section('content')
test: <?php echo date('Y-m-d H:i:s') ?>
<hr>
csrf: {{ csrf_field() }}
@endsection
※このようにするとレイアウトファイルが使われ、コンテンツが「layouts/app.blade.php」の@yield('content') 部分に埋め込まれる
※yield=譲渡する・委ねる
$articles = Article::orderBy('created_at', 'asc')->get();
return view('test', [
'articles' => $articles
]);
このように割り当てて、テンプレート側では以下のように参照する
@foreach ($articles as $article)
{{ $article->subject }} : {{ $article->detail }}<br>
@endforeach
■エスケープ
{{ 〜 }}
でHTMLがエスケープされる
{!! 〜 !!}
でHTMLがそのまま表示される。必要に応じて自前でエスケープする
ただし Htmlable を実装したクラスのインスタンスの場合はエスケープされない
具体的には {{ csrf_field() }} のようなコードが該当する
http://www.msng.info/archives/2016/01/laravel-blade-braces-dont-always-escape.php
Laravel4では
{{{ 〜 }}}
でHTMLがエスケープされる
{{ 〜 }}
でHTMLがそのまま表示される。必要に応じて自前でエスケープする
という挙動だった
■文章を改行して表示
{!! nl2br(e($body)) !!}
もしくは
/app/Providers/ViewServiceProvider.php
の boot() メソッド内で以下を定義する
\Blade::setEchoFormat('nl2br(e(%s))');
これで
{{ 〜 }}
でHTMLがエスケープされる。改行は改行タグが追加される
{{{ 〜 }}}
でHTMLがエスケープされるのみ
{!! 〜 !!}
でHTMLがそのまま表示される。必要に応じて自前でエスケープする
となる
How do I use nl2br() in Laravel 5 Blade
https://stackoverflow.com/questions/28569955/how-do-i-use-nl2br-in-laravel-5-blade