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