Laravel。在所有路线中保持变量可见

Laravel. Keep variable in view during all routes

我在 laravel 4.2 中遇到了非常简单的问题,但我无法解决。我得到了包含在所有路由中的右侧栏,它必须包含来自我的数据库 table 的一些内容。我在主页路由上得到 mysql 查询,我将变量传递给视图:

$query....    
return View::make('home')->with('query', $query);

我只想将这个 vatiable 发送到包含的视图 'right-side-bar',但它必须在所有路由中识别它。我试过嵌套、共享变量,但由于路由改变,我的 'right-side-bar' 视图无法识别变量 $query。我想听听一些如何解决它的建议。提前致谢!

编辑:

使用 View Composer

请记住,当您使用视图作曲家时,您应该通过作曲家自动加载 files/classes。

快速肮脏的方式:

View::composer('your-view-name', function($view)
{
    $query = //your query code
    $view->with('query', $query);
});

或有多个视图:

View::composer(array('a-view','a-second-view'), function($view)
{
    $query = //your query code
    $view->with('query', $query);
});

基于 class 的方法(推荐

View::composer('my-view', 'MyViewComposerClass');

然后创建 class

class MyViewComposerClass{

    public function compose($view)
    {
        $query = //your query code
        $view->with('query', query );
    }

}

使用基本控制器

好吧,一个简单的解决方法就是在构造函数中的 BaseController 中执行类似的操作。

BaseController.php

public function __construct(){
        $query = //your query code
        View::share('query', $query);
}

然后制作你的其他控制器(这显然扩展了 BaseController) 像这样在它们的构造函数中构造父控制器

扩展BaseController.php

的其他控制器
public function __construct(){
    parent::__construct();

}

然后像往常一样访问变量。

希望这对您有所帮助..

更多关于视图作曲家的信息:

Laravel 4.2: http://laravel.com/docs/4.2/responses#view-composers

Laravel 5.1: http://laravel.com/docs/5.1/views#view-composers