1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravelのコンポーネントとサブビューと@each【個人的なお勉強アウトプット】

Last updated at Posted at 2022-03-21

参考図書

コンポーネント

継承を利用したレイアウトは、親レイアウトの必要な部分にはセクションをはめこんで表示する。
このやり方は全体を一式そろえて作成するのに便利。
しかし、ときには一部を切り離して組み込みたいということもある。
例えばタイトルやフッターの表示などは、それぞれ独立した部品として用意しておけば便利。
切り離しておけば、必要に応じてそれらの部品だけを修正すればサイト全体を更新できるようになる。

@componentというディレクティブをつかって表示場所を設定する。

コンポーネントのテンプレートファイル

/resources/views/components/message.blade.php
<div class="header">
<p>{{$msg_title}}</p>
<p>{{$msg_content}}</p>
</div>

読み込むテンプレートファイル

/resources/views/index.blade.php
@component('components.message')
@slot('msg_title')
タイトルだよ
@endslot

@slot('msg_content')
メッセージの表示だよ
@endslot
@endcomponent

@componentで読み込むファイルを指定。

@slot

コンポーネントファイルの中に{{$msg_title}}{{$msg_content}という変数を用意していた。
コンポーネントを利用するときに、変数に必要な値を渡せる。

サブビュー

単純に用意したテンプレートをただはめ込んで表示する場合にはサブビューが良い。
普通のテンプレートを用意しておき、そのままはめ込んで表示おくだけのシンプルな仕組み。

サブビューを読み込む

上記のコンポーネントファイル(message.blade.php)を読み込む場合・・・
サブビューを読み込むテンプレートファイル(index.blade.php)に対して

/resources/views/index.blade.php
@include('components.message'. ['msg_title'=>'OK','msg_content'=>'サブビューです。'])

第一引数でファイルを指定、第二引数で値を連想配列として渡す。
同じキーの名前の変数として値を渡すことができる。

@eachによるコレクションビュー

あらかじめ用意されていた配列やコレクションから値を取り出し、指定のテンプレートにはめこんで出力するもの。

繰り返す指定のテンプレートファイル

/resources/views/components/item.blade.php
<li>{{$item['name']}}:{{$item['mail']}}<li>

表示するテンプレートファイル

/resources/views/index.blade.php
<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はテンプレート名を指定して呼び出すだけだから、新しいテンプレートを作成したらテンプレート名を書き換えるだけでデータの表示をガラリと変えてしまうことができる。
だから便利。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?