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

时间:2015-03-16 13:47:52

标签: php mysql laravel blade

我在laravel 4.2中遇到了相当简单的问题,但我无法解决它。我收到了右侧栏,在所有路线中都必须包含我数据库表中的一些内容。我在主页路由上获得了mysql查询,并将变量传递给view:

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

我想要的只是将这个空间发送到包含的视图'右侧栏',但它必须在所有路线中识别它。我尝试嵌套,共享变量,但由于路由更改,我的“右侧栏”视图无法识别变量$ query。我想听听一些如何解决它的建议。提前谢谢!

1 个答案:

答案 0 :(得分:0)

编辑:

使用View Composers

请记住,当您使用视图作曲家时,您应该通过作曲家自动加载您的文件/课程。

快速肮脏的方式:

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);
});

基于班级的方法(推荐

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

然后创建类

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

相关问题