在Laravel中的不同视图上传递相同的数据

在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

例如,我的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_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);
});