Laravel 4 - 将 json 解码到视图中
Posted
技术标签:
【中文标题】Laravel 4 - 将 json 解码到视图中【英文标题】:Laravel 4 - decoding json into view 【发布时间】:2014-02-08 22:40:34 【问题描述】:我最近一直在试验 Laravel 4,到目前为止,它使用起来很愉快。但是,我遇到了一个问题,不是 Laravel 4,而是我自己的无能。
我有一个包含 3 行和 4 列的数据库。例如,假设列是:
content_id, 内容类型, 内容数据, 时间戳
'content_data' 列包含一个由大约 4 个键值对组成的 JSON 编码数组。
当我从数据库中检索这些行(使用 Eloquent)并将数据传递到我的视图中时,如何将 JSON 解析到我的刀片模板中?
在搜索并参考 Laravel 文档后,我的想法是您不能,因此我尝试将 JSON 解码回控制器中的数组,然后将其传递到我的视图中。
到目前为止,我在课堂上尝试了以下方法:
<?php
class PageController extends \BaseController
public function index()
$data = Content::
->where('content_type', 1)
->get();
foreach($data as $content)
$items[] = json_decode($content->content_data);
return View::make('pages.page2')
->with('data', $data)
->with('items', $items);
但是,在我的 Blade 模板中,当我运行一个 foreach 循环来遍历提取的行时,我尝试在第一个循环中运行另一个 foreach 循环,该循环遍历 $items 数组以提取它们的值,但因为它是一个循环内循环,我得到重复的 json 值。
我的刀片模板如下所示:
@extends('layouts.pages');
@section('content_body')
<h1>My <span>title</span></h1>
<div class="column col-1">
<ul>
-- loop through the database rows --
@foreach($data as $row)
-- loop through the json decoded values --
@foreach($items as $item)
$item['title']
@endforeach
@endforeach
</ul>
</div>
@stop
不确定我的解释是否正确,但基本上我只是希望能够在显示提取的数据库行的循环中解析我的 json 编码数组
我希望这对可以提供帮助的人有意义。
【问题讨论】:
试试$content->content_data = json_decode($content->content_data)
。
所以你的意思是在我的控制器中执行 foreach 循环,而不是将 json_decoded 值分配到 $items 数组中,我应该将它分配给 $content->content_data?
我试试,不知道是什么问题。
感谢您的尝试,但没有成功。它只检索最后一行的 $data_content 列,因此我将它放入数组中。
【参考方案1】:
使用Eloquent Accessor 根据需要转换数据。
/**
* Eloquent accessor to transform our content_data column
* from JSON to an array.
*
* @param string $data Original JSON data
* @return array
*/
public function getContentDataAttribute($data)
return json_decode($data);
然后您可以像往常一样通过$content->content_data
检索您的列,但它将被转换为一个数组。
您可以在将数据保存到该列时执行相反的操作,方法是将传递的数组转换为 JSON 编码的字符串,也可以使用 mutator。
【讨论】:
它工作得很好,虽然我确实花了一些时间来理解访问器的命名约定以及如何从 Blade 中访问我的数组,但我设法弄明白了。顺便说一句,您的代码中有一个小错字,返回应该是json_encode
。非常感谢所有的贡献者。以上是关于Laravel 4 - 将 json 解码到视图中的主要内容,如果未能解决你的问题,请参考以下文章
如何在 laravel 中解码 Json 对象并在 laravel 中应用 foreach 循环