5
4

More than 3 years have passed since last update.

【PHP】Laravel @componentや@includeの第2引数。連想配列でデータを渡す方法。

Posted at

PHPのコードを確認していて以下のようなコードの処理内容の確認。

@include('mrgrpcv::items.items', ['items' => $items])

通常@includeはbladeビュー(.blade.php)内で指定したビューを読み込むために使用される。

@include('ファイル名')

名前空間

@include('mrgrpcv::items.items)のように、ここではファイル名の指定に名前空間が用いられている。

名前空間はServiceProviders.phpboot関数内で設定している。

名前空間の設定
    public function boot()
    {   
        $this->loadViewsFrom(__DIR__.'/../../views', 'mrgrpcv');
        $this->publishes([
            __DIR__.'/../../views' => resource_path('views/vendor/mrgrpcv'),
        ], 'mrgrpcv');
    }

/../../views を mrgrpcvとしている。

名前空間の後ろに続く、items.itemsは、/../../viewsフォルダ内の、itemsフォルダの、items.blade.phpファイルを指している。

第2引数

文献をあさってもなかなか記述が見つからないincludeの第2引数の役割は、類似したものとして、@componentの第2引数があげられる。

場合により、コンポーネントへ追加のデータを渡す必要が起きます。そのため、@componentディレクティブの第2引数で、データの配列が渡せます。全データはテンプレート中で変数として利用できます。

@component('alert', ['foo' => 'bar'])
...
@endcomponent

Laravel公式ページより

この第2引数['foo' => 'bar']により、componentに対し、値barが格納された変数$fooを渡している。

['子に渡す変数名' => 渡すデータ]



▼実際のコード
上記に沿って、実際のコードを見ると、指定したビューファイルの変数$itemsを、includeしたファイルの中で$itemsという変数で使えるようにしている。

@include('ファイルパス', ['items' => $items])

名前が同じなのでわかりにくいが、$items = [1 ,2 ,3]だとすると、

@include('ファイルパス', ['items' => [1, 2, 3] ])と同じ処理になる。


@include('ファイルパス', ['items' => [1, 2, 3] ])

@foreach($items as $item)
  <p>{{$item}}</p>
@endforeach

とすれば、画面には以下が表示される。
1
2
3


viewヘルパの場合

bladeの@include@componentと同じく、viewヘルパでも第2引数以降でデータを渡すことができる。

view('ファイル名', ['変数名' => 渡すデータ])


複数のデータを渡す場合
return view('contents.blog.show',
        [
            'article' => $article,
            'articleStyle' => $articleStyle,
            'latest_articles' => $articles,
            'preview_code' => $preview_code
        ]);
5
4
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
5
4