1

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

例如,当我尝试在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()过滤器中注册而不是在控制器构造函数中注册,我认为它们应该属于哪里?

4

1 回答 1

3

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

例如,这个(选中的)可以按照你的意愿工作(让 BaseController 保持原样):

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

);

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

于 2013-10-21T08:02:10.097 回答