2014-01-08 36 views
0

我需要所有視圖中的相同菜單。Laravel,可變輸出與View :: share一起工作,但不能與VIew :: composer一起工作

所以我得到的數據我需要在我的BaseController中定義的構造函數中輸出菜單。

搞到我第一次嘗試使用瀏覽::作曲家的數據,但不知道爲什麼我沒有得到任何錯誤,它看起來就像是根本沒有執行搜索::作曲家...

如果我使用的是View ::份額,其工作

//BaseController.php

//function called in the constructor 
public function init() 
{ 
    $envs = $this->game->environments()->get(); 

    View::share('test', $envs); 

    View::composer('layouts.base', function($view) 
    { 
     $view->with('envs', $envs); 
    }); 
} 

//base.twig

//nothing output here, no error 
{% for env in envs %} 
     {{ env.name }} 
{% endfor %} 

//its work 
{% for env in test %} 
     {{ env.name }} 
{% endfor %} 

我是新來的拉拉維爾,所以也許我錯過了什麼?

回答

1

我認爲這不起作用的原因是因爲您將View Composer放入代碼的位置。 Laravel中的View Composer基本上是回調,只要渲染視圖就會執行回調。這個init()函數在哪裏定義?我的猜測是,視圖正在被創建之前您的視圖作曲家被定義 - 這意味着視圖作曲家回調永遠不會被執行。

嘗試移動init()函數中的整個視圖編輯器塊,並將其追加到您的routes.php文件的底部並查看它是否有效。如果你沒有太多的話,放置視圖作曲家不是一個不好的地方,如果你可以創建一個新的類來存儲它們,並將該路徑添加到自動加載路徑中。

瞭解更多關於視圖作曲家here

+0

我編寫基於你的鏈接已經在我的View Composer,它說一下,我們必須把它們放在一個特別的地點事實上任何東西。 :/ 它的意思是呈現在BaseController構造函數之前?有點奇怪! 感謝您的回答,我將使用課程來存儲它們。 我只想知道一件事,在我的例子中,我應該使用視圖作曲家或繼續使用查看共享?我已經看過有關這方面的主題,但並沒有真正回答,因爲View共享對於所有視圖來說都是全局的,我的基礎模板上的視圖編輯器應該做同樣的事情,因爲我的所有模板都擴展了base.twig模板? –

+1

我不認爲視圖在BaseController之前_rendered_它們是_created_之前,並且視圖編寫器回調僅在新視圖的**創建時觸發......所以在原始代碼中調用視圖編輯器將永遠不會因爲他們認爲已經創建了火。 至於視圖共享VS作曲家 - 我會使用作曲家,如果你需要在回調中做些事情來改變你傳遞給視圖的變量。如果您只是將非動態變量傳遞給視圖,則我的建議是使用視圖共享。 – berrberr

相關問題