【问题标题】:Laravel - Render html passed by an associative arrayLaravel - 渲染由关联数组传递的 html
【发布时间】:2018-06-27 08:43:07
【问题描述】:

我已经为此苦苦挣扎了几天。

我有一个关联数组,我想在我的视图中循环。例如,在循环创建表时效果很好。

问题是,在另一个视图中,我需要在数组中包含一些 HTML(一个按钮),我将把它作为 JSON 传递给视图。我已经尝试过这样和它,没有成功。

$datacol[] = array(
'button' => '<a href="tasks/details/{{ $task->id }}" class="btn btn-sm">
<i class="bookmark big icon" data-toggle="tooltip" data-placement="top" title="Task Details"></i></a>',
'id' => $task->id,
'task_type' => (DB::table('tasktypes')->where('id','=', $task->task_type_id)->value('task_type')),
'related_block' => (DB::table('chapters')->where('id','=', $task->related_block)->value('description')),
'assigned_to' => (DB::table('users')->where('id','=', $task->assigned_to)->value('display_name')),
'time' => (DB::table('task_interactions')->where('task_id','=', $task->id)->pluck('task_time')->sum()),
'start_date' => (DB::table('task_interactions')->where('task_id','=', $task->id)->where('status','=','In Progress')->pluck('created_at')->first()),
'end_date' => (DB::table('task_interactions')->where('task_id','=', $task->id)->where('status','=','Finished')->pluck('created_at')->first()),
'status' => (DB::table('tasks')->where('id','=', $task->id)->value('status')),
'comments' => (DB::table('tasks')->where('id','=', $task->id)->value('comments'))
);

有谁知道在数组中传递 HTML 并确保数组在视图中呈现的方法。

<tbody>
@foreach($datacol as $d)
<tr>
<td>{{ $d['button'] }}</td>
<td>{{ $d['id'] }}</td>
<td>{{ $d['task_type'] }} - {{ $d['related_block'] }}</td>
<td>{{ $d['assigned_to'] }}</td>
<td>{{ $d['time'] }}</td>
<td>{{ $d['start_date'] }}</td>
<td>{{ $d['end_date'] }}</td>
<td>{{ $d['status'] }}</td>
<td>{{ $d['comments'] }}</td>
</tr>
@endforeach
</tbody>

提前致谢

【问题讨论】:

  • 您在尝试示例代码时遇到了什么错误?
  • 如果我循环创建一个表,我会看到数组中的代码
  • 您的示例代码来自控制器还是视图?你想做的重点是什么?请明确提出问题。
  • 我正要回答你的问题,但我看到你对他们投了反对票,祝你好运
  • 我认为不需要为视图预渲染按钮,你做错了,只是将数据传递给视图

标签: html arrays json laravel


【解决方案1】:

从 PHP 代码中完全删除按钮键值对并在视图中呈现标记。

你可以在视图中生成&lt;a&gt;标签,只使用你传递的id({{ $id }}):

<a href="tasks/details/{{ $id }}" class="btn btn-sm">
<i class="bookmark big icon" data-toggle="tooltip" data-placement="top" title="Task Details"></i></a>

无需在您的 PHP 代码中混合 HTML(考虑到您使用的是 Laravel,它将视图与其他代码完全隔离)。

【讨论】:

  • 请解释否决票。这是一个完全有效且正确的答案。
  • 嗨,tkx 为您提供帮助。它适用于表格,但如果我尝试在 json 中传递按钮(我将来需要)来创建数据表,它将无法正常工作,因为 HTML 将无法正确呈现。跨度>
  • 在 JSON 中传递按钮 是什么意思?您需要传递 data 而不是 HTML(即视图),以便只有 view 可以决定如何呈现它。如果您将控制器代码中的标记发送到 view,那么 view 将没有任何选项。如果将来您想使用其他标签而不是a/i,比如button,该怎么办?您需要插入控制器,而不是视图。或者,更糟糕的是——如果你想在同一个控制器上使用另一个视图怎么办?你实际上是做不到的。 总结:将渲染委托给视图并保持控制器简单。没有标记。
  • @AI.G. - 我明白你在说什么,我一直在这样做。但问题是我想让表格更加动态,使用数据表来过滤视图中的数据,并且我想保留表格中的链接,以访问每个任务(表格行)的更详细信息。这就是为什么我想在 JSON 中传递按钮。我愿意接受建议,也许有更简单的方法可以做我想做的事。谢谢
  • 我想让表格更加动态,使用数据表来过滤视图中的数据,我想保留表格中的链接,以访问每个任务的更详细信息 i> - 但&lt;button&gt; 标签没有带来任何新信息。来自 DB 的所有数据都已经通过其他 props 发送到视图。
【解决方案2】:

像这样更改您的数组,您需要为按钮提供正确的 html 字符串,因为它不会被刀片进一步解析。在 href 中,您使用刀片 ({{}}) 附加 $task->id,这就是它不会将正确的 id 附加到 url 的原因。您需要使用 (.) 将 id 连接到 url。

$datacol[] = array(
     'button' => '<a href="tasks/details/'.$task->id.'" class="btn btn-sm">
<i class="bookmark big icon" data-toggle="tooltip" data-placement="top" title="Task Details"></i></a>',
    'id' => $task->id,
// other stuff 
);

然后在视图中使用 {!! $html !!}

<tbody>
@foreach($datacol as $d)
<tr>
<td>{!!$d['button'] !!}</td>
<td>{{ $d['id'] }}</td>
<td>{{ $d['task_type'] }} - {{ $d['related_block'] }}</td>
<td>{{ $d['assigned_to'] }}</td>
<td>{{ $d['time'] }}</td>
<td>{{ $d['start_date'] }}</td>
<td>{{ $d['end_date'] }}</td>
<td>{{ $d['status'] }}</td>
<td>{{ $d['comments'] }}</td>
</tr>
@endforeach
</tbody>

希望对你有帮助:)

【讨论】:

  • Tkx 为您提供帮助。我已经尝试过您的解决方案,但我遇到了 HTML 特殊字符的问题,在我尝试过的任何示例中,变量都没有作为 id 传递。另一件事是,当我点击按钮时,链接的部分/任务加倍。我会再研究一下,然后回复你
猜你喜欢
  • 2021-09-26
  • 2017-06-28
  • 2018-11-11
  • 2021-10-03
  • 2020-05-30
  • 2018-10-10
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
相关资源
最近更新 更多