【问题标题】:Laravel - edit data before passing to viewLaravel - 在传递给视图之前编辑数据
【发布时间】:2017-02-17 08:43:09
【问题描述】:

我正在寻找一种在将数据传递给查看之前对其进行编辑的方法。

快速示例(仅用于演示): 假设我通过控制器将变量 $name 传递给视图。我想使用一些东西来传递另一个变量$message,其中包含Hello $name,例如Hello John,如果变量$name 是John。

我不想在控制器中发送第二个变量,因为我要使用很多控制器、视图,而且我想要对数据做的事情相当复杂。

我需要将它用于变量view("foobar", ["foo" => "bar"]) 和会话view("foobar")->with("foo", "bar")

我尝试同时使用 MiddlewareService Provider 但问题是我无法访问发送的数据。

我现在能想到的唯一可能的解决方案是使用 View 布局,我将 include 到每个视图中并转换变量(使用类似 <? $message = "Hello $name"; ?> 在视图中),但这对我来说似乎不是正确的 MVC 解决方案。

谢谢大家的回答!

【问题讨论】:

  • View::share('foo', $foo); 怎么样?您可以在控制器之外的任何地方使用它,$foo 将在返回的视图中呈现。
  • 关于嵌套消息,您可以在控制器中执行 view('message', 'Hello %s'); 并在视图中调用 {{ sprintf($message, $foo) }}
  • @Kyslik - 谢谢,但这并不是我真正想要的@MarcoFlorian - 我已经尝试过View::share 这正是我想要的,但我的问题是我不知道如何获取从控制器传递的数据来操作它们。在传递我的新变量之前,我需要将变量传递给视图。还有关于sprintf- 我要传递的变量是一个数组,所以我认为这不是这样做的方法(Hello $name 的例子只是一个例子,实际上我将使用数组)

标签: php laravel blade


【解决方案1】:

如果要传递会话数据和多个变量,请执行以下操作:

session()->flash('message', 'some message');

return view('foobar', [
    'foo' => 'bar',
    'second' => 'something'
]);

更新

如果我理解正确,你想使用view composer

【讨论】:

  • 感谢您的回答,但这并不是我想要的。我想在渲染视图之前在某处获取变量/会话内容,然后将新变量传递给视图。基本上我想要中间件之类的东西,我可以在其中访问发送的数据以查看和发送新数据。
  • 也许您正在寻找视图作曲家(链接在更新的答案中)?你能告诉我你为什么需要这个吗?也许有更简单的解决方案。例如,您可以使用session() 直接获取视图中的数据。
  • 是的,我试过 view composer,但我无法访问会话和变量。我需要这个,因为我正在发送有关某些操作结果的数据(即 post deleted 等)。它可以是一个数组 - 消息和类型(成功、错误、警告……)或字符串(只有默认类型成功的消息文本)。 1. 我需要将字符串转换为数组(自动添加类型) 2. 我需要生成对应的图标(即成功 = 检查)和颜色(即成功 = 绿色,错误 = 红色)。您知道如何在模板之外执行此操作吗?
猜你喜欢
  • 2016-04-14
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多