视图共享/编辑器无法从BaseController正常工作

时间:2013-10-21 00:21:14

标签: laravel laravel-4

我遇到的问题是,当我在某些位置注册绑定时,我尝试绑定到我的视图的数据才有效。

例如,当我尝试在App::before()过滤器中进行绑定时,它可以正常工作,successMessages在所有视图中都可用。

App::before(function($request)
{
    View::share('successMessages', array('All good', 'Nailed it', 'Perfect'));
});

但是,当我尝试在BaseController构造函数(所有控制器都继承自)时,我得到一个未找到变量的错误。

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

当我尝试使用视图编辑器而不是View::share()方法时,存在同样的问题。

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

知道为什么这些会在App::before()过滤器中注册而不是在控制器构造函数中注册,我认为它们应该属于哪个?

1 个答案:

答案 0 :(得分:3)

在将消息传递给控制器​​的情况下,您很可能在未使用控制器的路由中找到未找到的变量,因此不构造BaseController。

例如,这个(选中)可以按照您的意愿工作(保留BaseController):

Route::get('testit',
array('as' => 'testing',  'uses' => 'App\Controllers\Site\SomeController@gsomeMethod')

);

对于从BaseController继承并构造视图的控制器中的任何方法,$ successMessages将在视图中可用。