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

时间:2014-04-03 10:36:19

标签: 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_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中实现这一点,我不需要将它们复制并粘贴到每个控制器中?

2 个答案:

答案 0 :(得分:3)

使用分享方式传递您的数据:

// for single controller:
class SomeController extends BaseController {
  public function __construct()
  {
    $data = Post::orderBy('created_at', 'DESC')->paginate(6);
    View::share('data', $data);
  } 
}

对于所有控制器,您可以将此代码放在BaseController的构造函数

答案 1 :(得分:2)

如果每次将这段HTML放入局部,然后使用View Composer,则使用相同的HTML显示数据。

创建一个视图并随意调用它并将其放入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);
});

现在,只要您的某个模板中包含该部分,就可以访问您的数据