Laravel 4 - 将json解码为视图

时间:2014-01-19 20:53:23

标签: php arrays json foreach laravel-4

我最近一直在尝试使用Laravel 4,到目前为止,使用Laravel 4是一种乐趣。但是,我遇到了一个问题,不是Laravel 4,而是我自己的无能。

我有一个包含3行4列的数据库。例如,假设列是:

的content_id, 内容类型, content_data, 时间戳

'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编码数组

我希望这对有帮助的人有意义。

1 个答案:

答案 0 :(得分:4)

使用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检索您的列,但它会被转换为数组。

通过使用mutator将传递的数组转换为JSON编码的字符串,可以在将数据保存到该列时执行反向操作。