在Laravel中的不同视图上传递相同的数据
例如,我的HomeController中有以下代码:在Laravel中的不同视图上传递相同的数据,laravel,view,controller,Laravel,View,Controller,例如,我的HomeController中有以下代码: public function index() { $comments = Comment::get_recent(); $top = User::get_top_uploaders()->get(); $top_something = User::get_top_something_uploaders()->get(); $data = Post::orderBy('created_a
public function index() {
$comments = Comment::get_recent();
$top = User::get_top_uploaders()->get();
$top_something = User::get_top_something_uploaders()->get();
$data = Post::orderBy('created_at', 'DESC')->paginate(6);
return View::make('index') ->with('data', $data)
->with('comments', $comments)
->with('top', $top)
->with('top_something', $top_something);
}
它工作得很好,但是我需要用同样的数据创建另外两个视图,不仅用于索引,还用于其他页面,如comments()
,post()
。。。
如何在HomeController中实现此功能,而无需在每个控制器中复制并粘贴这些变量?使用共享方法传递数据:
// for single controller:
class SomeController extends BaseController {
public function __construct()
{
$data = Post::orderBy('created_at', 'DESC')->paginate(6);
View::share('data', $data);
}
}
对于所有控制器,如果每次都使用相同的HTML显示数据,您可以将该代码放入BaseController的构造函数中,然后使用视图生成器 创建一个视图,并根据需要调用它,然后将其放入HTML中以获取数据 在需要该部分的模板中包含它
@include('your.partial')
在app/routes.php或更好的app/composers.php中(别忘了自动加载)
现在,只要该部分包含在您的模板中,它就可以访问您的数据也许可以签出。它们在将数据传递给一个视图(或多个视图)时非常有用,只要生成数据的方式不依赖于控制器或任何东西。谢谢,我不知道:)
View::Composer('your.partial', function($view)
{
$data = Post::orderBy('created_at', 'DESC')->paginate(6);
$view->with('data', $data);
});