拉拉维尔。在所有路线中保持变化
Posted
技术标签:
【中文标题】拉拉维尔。在所有路线中保持变化【英文标题】:Laravel. Keep variable in view during all routes 【发布时间】:2015-05-18 15:53:46 【问题描述】:我在 laravel 4.2 中遇到了非常简单的问题,但我无法解决。我得到了包含在所有路线中必须包含我的数据库表中的一些内容的右侧栏。我在主页路由上得到了 mysql 查询,并将变量传递给查看:
$query....
return View::make('home')->with('query', $query);
我想要的只是将此变量发送到包含视图“右侧栏”,但它必须在所有路线中识别它。我尝试了嵌套、共享变量,但由于路线发生了变化,我的“右侧栏”视图无法识别变量 $query。我想听听我如何解决它的一些建议。提前致谢!
【问题讨论】:
laravel.com/docs/5.0/views#view-composers 【参考方案1】:编辑:
使用视图编辑器
请记住,当您使用视图作曲家时,您应该通过作曲家自动加载您的文件/类。
快速肮脏的方式:
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
【讨论】:
清晰有效。谢谢。 没问题,到时候你就会掌握窍门的:) 也可以将代码放在App::before
中,以便能够将其与路由闭包和控制器一起使用。
另外,也不需要在子类上定义构造函数来调用parent::__construct();
,因为这是在实例化对象时自动完成的。
我不建议这样做,而是使用像@lukasgeiter 建议的视图控制器,因为现在你有开销必须调用parent::__construct()
任何时候你想在控制器中定义一个唯一的构造函数.如果在每个请求上运行,我还建议缓存查询的结果。以上是关于拉拉维尔。在所有路线中保持变化的主要内容,如果未能解决你的问题,请参考以下文章