参考図書
コンポーネント
継承を利用したレイアウトは、親レイアウトの必要な部分にはセクションをはめこんで表示する。
このやり方は全体を一式そろえて作成するのに便利。
しかし、ときには一部を切り離して組み込みたいということもある。
例えばタイトルやフッターの表示などは、それぞれ独立した部品として用意しておけば便利。
切り離しておけば、必要に応じてそれらの部品だけを修正すればサイト全体を更新できるようになる。
@componentというディレクティブをつかって表示場所を設定する。
コンポーネントのテンプレートファイル
<div class="header">
<p>{{$msg_title}}</p>
<p>{{$msg_content}}</p>
</div>
読み込むテンプレートファイル
@component('components.message')
@slot('msg_title')
タイトルだよ
@endslot
@slot('msg_content')
メッセージの表示だよ
@endslot
@endcomponent
@componentで読み込むファイルを指定。
@slot
コンポーネントファイルの中に{{$msg_title}}
、{{$msg_content}
という変数を用意していた。
コンポーネントを利用するときに、変数に必要な値を渡せる。
サブビュー
単純に用意したテンプレートをただはめ込んで表示する場合にはサブビューが良い。
普通のテンプレートを用意しておき、そのままはめ込んで表示おくだけのシンプルな仕組み。
サブビューを読み込む
上記のコンポーネントファイル(message.blade.php)を読み込む場合・・・
サブビューを読み込むテンプレートファイル(index.blade.php)に対して
@include('components.message'. ['msg_title'=>'OK','msg_content'=>'サブビューです。'])
第一引数でファイルを指定、第二引数で値を連想配列として渡す。
同じキーの名前の変数として値を渡すことができる。
@eachによるコレクションビュー
あらかじめ用意されていた配列やコレクションから値を取り出し、指定のテンプレートにはめこんで出力するもの。
繰り返す指定のテンプレートファイル
<li>{{$item['name']}}:{{$item['mail']}}<li>
表示するテンプレートファイル
<ul>
@each('components.item',$data,'item')
</ul>
$dataという変数をitem
に入れて繰り返す。
コントローラーのアクションメソッドで$dataを用意しておき、渡す。
コントローラー
public function index(){
$data = [
['name'=>'山田たろう', 'mail'=>'taro@yamada'],
['name'=>'田中はなこ', 'mail'=>'hanako@flower'],
['name'=>'鈴木さちこ', 'mail'=>'sachico@happy'],
];
return view('index',['data'=>$data])
}
@eachで一つ一つ配列が取り出され出力される。
@eachはテンプレート名を指定して呼び出すだけだから、新しいテンプレートを作成したらテンプレート名を書き換えるだけでデータの表示をガラリと変えてしまうことができる。
だから便利。