2013-10-21 53 views
1

我遇到問題,我嘗試綁定到我的視圖的數據只有當我在某些位置註冊綁定時才起作用。查看共享/作曲家不能從BaseController正常工作

例如,當我嘗試綁定App::before()過濾器時,它可以工作,並且所有視圖中都可以使用successMessages。但是,當我嘗試在BaseController構造函數(所有控制器繼承自它)中執行此操作時,我收到一個未找到變量的錯誤。

class BaseController extends Controller 
{ 
    public function __construct() 
    { 
     View::share('successMessages', array('All good', 'Nailed it', 'Perfect')); 
    } 
} 

同樣的問題,當我嘗試使用,而不是View::share()方法將View Composer存在。

View::composer(array('layouts.application', 'layouts.home'), function($view) 
{ 
    $view->with('successMessages', array('All good', 'Nailed it', 'Perfect')); 
}); 

任何想法,爲什麼這些將在App::before()過濾器註冊,但是不能控制器構造,在那裏我想他們大概應該屬於?

+0

也許你應該從子控制器調用父構造函數? 'parent :: __ construct()' –

回答

3

在將消息傳遞給控制器​​的情況下,您最有可能獲得未在未使用控制器的路由中找到的變量,因此BaseController未構造。

例如,這個(選中)的作品,你會想(離開BaseController因爲你擁有它):

Route::get('testit', 
array('as' => 'testing', 'uses' => 'App\Controllers\Site\[email protected]') 

);

對於繼承自BaseController並構造視圖的控制器中的任何方法,$ successMessages將在視圖中可用。

+0

看起來你是對的 - 對我來說很愚蠢。正在通過'routes.php'中的回調進行解析的路由而不是傳遞給控制器​​導致了這個問題。 – Dwight

+0

適合所有人:)很高興幫助。 – alou