Laravel6 で @includeしたファイルに引数を渡して、include先でデータ表示させたい場合
コードを使いまわしたいときって、部分的なviewファイルを用意して別の複数ファイルから呼び出したくなりますよね。
そんなときに @include が便利です。
公式ドキュメントでは
includeの呼び出し元の記述方法については明記されています。
@include('view.name', ['some' => 'data'])
これを応用して、 template.blade.php
ファイルに $data
変数を渡して読み込みたいときは以下のように記述すればいいです。
@include('template', ['data' => $data])
読込まれるtemplateビューファイル
<!DOCTYPE html>
<body>
今日の日付は{{ $data }}です。
</body>
</html>
と、ここまではすんなり理解できます。
しかし、肝心の読込んだ templateビューで$dataは下記の様にコードがそのまま表示され、
Laravelの記述方式では表示できない。。
なんでや?
ちなみに {{ $data }}
は echo $data;
の省略形なので表示されていいはずです。
少しファイルをいじって、試しに@php~@endphpで記述してみました。
<!DOCTYPE html>
<body>
今日の日付は@php echo $data; @endphpです。
</body>
</html>
しかし、これも適切に読み込んでくれず
となりました。
つまり、includeされるビューファイルを
Laravel表記では読み込んでくれない。
というわけで
標準のphp形式でコードを書いてみました。
<!DOCTYPE html>
<body>
今日の日付は<?php echo $data; ?>です。
</body>
</html>
無事、表示されました!
includeされる側での記述方法について明記されていません。
これは、こういう仕様なのでしょうか?
「そんなことないはず!」
という方は@includeする際の注意点を教えてもらえると嬉しいです。