2013-10-21 49 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