こんにちは。ファガイです。
本日は、Laravelに標準搭載されてあるブレードテンプレートエンジンの落とし穴?に引っかかったので軽くまとめます。
これが起こる場合はこのような書き方をしていた時です。
FuelPHPを使ってた方はこのような書き方をしようとするでしょう。
ブレード側
<html>
<head></head>
<body>
@include('parts.header')
{{$content}}
@include('parts.footer')
</body>
</html>
メソッド側
protected $layout = 'layout.master'; public function show() { $this->layout->content = View::make('home.index'); }
このような形です。よくあると思います。
この場合の時に、テンプレートエンジン内で共通で使える変数を定義しようと思い、setupLayoutメソッドにこのような事を書いたとします。
$this->layout->user_id = 1;
結論から言うと、このuser_idという変数は$content(home.index)からは見えません。
View::makeがそもそもそのような仕様なのかも知れません。恐らく追加するのであれば、そのcontentに対してもuser_idの変数追加が必要でしょう。
■解決策
私が行った解決策です。extendsとsectionでのソース設定も考えましたが、面倒なのでやめました。
私が行ったのは、contentに入れる際に文字列だけを入れるように変更し、
contentを呼ぶ際は、@includeを使って呼ぶという形。
<html>
<head></head>
<body>
@include('parts.header')
@include($content)
@include('parts.footer')
</body>
</html>
protected $layout = 'layout.master'; public function show() { $this->layout->content = 'home.index'; }
このような形です。
もっと良い方法があればコメントしていただければ幸いです。
ではではー。
コメント