Memo

メモ > 技術 > フレームワーク: Laravel > テンプレート

テンプレート
■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

Advertisement