【问题标题】:Passing data to views without "with()" in view composers在视图作曲家中将数据传递给没有“with()”的视图
【发布时间】:2015-05-05 04:12:59
【问题描述】:

我喜欢在 Laravel 中将数据传递给视图的方式。但我不使用“with”方法,我更喜欢将所有数据作为视图辅助函数中的第二个参数传递:

$data = [
    'name' => Auth::User() -> name
]

return view('dashboard', $data);

现在很容易在视图中使用我的数据:

Hello {{ $name }}

没必要

Hello {{ $data['name'] }}

但这是我的问题:
我想在视图作曲家中做同样的事情。但我见过的将数据传递给视图作曲家的唯一方法是:

public function compose(View $view)
{
    $data = [
        'name' => Auth::User() -> name
    ]

    $view -> with('data', $data);
}

但这需要我做

Hello {{ $data['name'] }}

在我看来,这是我不想要的。我想使用简短的语法。那么有没有办法像我上面描述的那样通过它?作为视图函数的第二个参数?

谢谢

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    只需使用foreach 循环遍历数组的每个部分:

    foreach($data as $key => $value) { $view->with($key, $value); }
    

    【讨论】:

      【解决方案2】:

      在回答您关于仅调用 view 函数传递值的问题时,答案是否定的,您不能那样做。

      想想你在第一个例子中做了什么。当您调用 view('template', $data) 时,您正在调用 Laravel 核心中定义的辅助函数。该功能在做什么?它正在实例化一个视图,可能是通过调用View::make()->with()。换句话说,它在幕后做着你想避免的事情。

      现在如何使用视图作曲家?我想它会是这样的:

      在您的控制器中,您调用view('template', $somedata)

      您现在有一个包含$somedata 的视图对象。

      在渲染 HTML 页面的过程中,Laravel 调用你的视图合成器,传递你刚才创建的视图对象。

      然后你调用view($newdata)(或类似的东西——我不清楚语法是什么),它会将新数据附加到现有的视图对象。但这不是 Laravel 开发人员所做的事情。这并不是说它做不到,只是他们没有考虑过这个用例。

      可以做的是在视图编辑器中逐步检查新数据并将各个值添加到现有视图中,如下所示:

      foreach ($newdata as $key => $value) {
          $view->with($key, $value);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-16
        • 2019-11-01
        相关资源
        最近更新 更多