Laravel Blade Template Engineを使用する上での落とし穴

スポンサーリンク

こんにちは。ファガイです。

本日は、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';
}

このような形です。

もっと良い方法があればコメントしていただければ幸いです。
ではではー。

コメント

タイトルとURLをコピーしました