Laravel - 渲染由关联数组传递的html

时间:2018-01-18 10:02:49

标签: html arrays json laravel

我几天都在为此苦苦挣扎。

我有一个关联数组,我想在我的视图中循环。例如,在循环创建表时,它非常有用。

事情是,在另一个视图中,我将需要在数组中包含一些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>

提前致谢

2 个答案:

答案 0 :(得分:1)

像这样更改你的数组你需要为按钮提供适当的html字符串,因为它不会被刀片进一步解析。在href中,您使用刀片({{}})附加$ task-&gt; id,这就是为什么它不会在网址中附加正确的ID。你需要使用(。)将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>

我希望它会有所帮助:)

答案 1 :(得分:0)

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

您可以在视图中生成<a>标记,仅使用您传递的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,它将视图与其他代码完全隔离)。