2014-01-17 173 views
27

我試圖做include與Laravel刀片,但問題是它不能傳遞變量。這裏是我的示例代碼:Laravel 4刀片@include變量

file_include.blade.php

<?php 
    $myvar = "some text"; 

main.blade.php

@include('file_include') 
{{$myvar}} 

當我運行該文件,它會返回錯誤 「未定義的變量:MYVAR」。那麼,如何將包含文件的變量傳遞給主文件呢?

謝謝。

+0

@包括用於包括子的觀點,它不該」用這種方式來加載變量。 記住這些是刀片模板,而不是常規的php文件。 –

回答

0

在這種scenarion $myvar將僅適用於包括呼叫的局部範圍。

爲什麼不直接從控制器發送變量?

2

刀片是Laravel的模板引擎。所以請嘗試從控制器傳遞值,或者您可以在routes.php中定義它以用於測試目的。

@include用於包含子視圖。

52

你爲什麼要將它從包含傳遞給調用模板?如果你需要在調用模板,有創建它,然後將它傳遞到包括模板是這樣的:

@include('view.name', array('some'=>'data')) 

上面的代碼片段從http://laravel.com/docs/templates

+0

不幸的是,這不是解決方案如果你需要從不同的頁面變量!請檢查我的答案,你會明白我的意思 – ErcanE

+0

好點。我的回答並沒有真正解決實際問題。相反,我提供了一個不涉及傳遞變量的解決方案。但是,如果需要傳入一個變量,您的解決方案非常適合! – Kenny

1

我認爲你必須瞭解Laravel刀片變量範圍模板。使用@include包含模板將從其父視圖(它定義的視圖)繼承所有變量。但我想你不能在你的子視圖的父範圍中使用你定義的變量。如果你想讓你的變量可用於父級,請使用View::share($variableName, $variableValue),它將按預期的方式適用於所有視圖。

7

不幸的是,Laravel Blade引擎不支持你所期望的!但是有一點傳統的方式可以實現這一點!

SOLUTION 1 - 無需Laravel Blade Engine

步驟a:

file_include.blade.php 

file_include.php 

步驟b:

main.blade。PHP

<?php 
    include('app/views/file_include.php') 
?> 
{{$myvar}} 

SOLUTION 2Laravel Blade Engine

routes.php

$data = array(
'data1'   => "one", 
'data2'   => "two", 
); 

View::share('data', $data); 

訪問$數據陣列從Any View這樣

{{ $data['data1'] }} 

輸出

one 
0

我建議你做一個經典的PHP需要,如果你真的想改變你的變量(然後參照自動的)