【问题标题】:Passing the same data over different views in Laravel在 Laravel 的不同视图中传递相同的数据
【发布时间】:2014-04-03 10:36:18
【问题描述】:

例如,我的 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 中进行此操作,而无需将这些变量复制并粘贴到每个控制器中?

【问题讨论】:

  • 也许可以查看view composers。它们对于将数据传递给一个视图(或多个视图)很有用,只要生成数据的方式不依赖于控制器或任何东西。

标签: laravel view controller


【解决方案1】:

使用共享方法传递您的数据:

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

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

【讨论】:

    【解决方案2】:

    如果每次都使用相同的 HTML 显示数据,您可以将那段 HTML 放入部分 HTML 中,然后使用 View Composer。

    创建一个视图并将其命名为您想要的任何名称,然后将数据放入您的 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);
    });
    

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

    【讨论】:

    • 谢谢,我不知道 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 2020-04-09
    • 2019-04-03
    相关资源
    最近更新 更多