在twig中循环数据库中的json数据

时间:2016-12-27 22:37:48

标签: php doctrine twig symfony

所以目前我已经进入了我的控制器:

public function indexAction()
{
    $repository = $this->getDoctrine()->getRepository('ApiBundle:Request');

    $themes = $repository->findAll();

    return $this->render('ApiBundle:Default:index.html.twig', ['themes' => $themes]);
}

在我的树枝上:

{% for theme in themes %}
    <div am-col="md-6">
        <div am-row>
            <div am-col="md-3">
               {{ theme.preview|json_encode }}
            </div>
            <div am-col="md-8">
                {{ theme.name }}
            </div>
        </div>
    </div>
{% endfor %}

现在theme.previews返回一个json,如下所示:

{"icon_with_video_preview":{"icon_url":"https:\/\/0.s3.envato.com\/files\/170231072\/design-wordpress80.png","landscape_url":"https:\/\/0.s3.envato.com\/files\/170231083\/design-wordpresspreview.jpg","video_url":"https:\/\/0.s3.envato.com\/h264-video-previews\/02e0816d-0957-45c4-af2c-792e37bcc37a\/14727479.mp4"}}

我需要访问并显示icon_url。有任何想法吗? l目前尝试了{{ theme.preview.icon_with_video_preview.icon_url }}但是收到错误,说这个数组无法转换为字符串。

2 个答案:

答案 0 :(得分:1)

我认为在这种情况下你可能需要从控制器发送一个json编码变量,如下所示:

return $this->render('ApiBundle:Default:index.html.twig',[
    'themes' => $themes,
    'json_themes' => json_encode($themes),
]);

然后在您的Twig中,您可以按需要打电话:

{% for jtheme in json_themes %}
    {{ jtheme.preview.icon_with_video_preview.icon_url }}
{% endfor %}

如果您需要同时使用json和非json变量,我将两者都包含在控制器中。根据需要进行调整。

如果有效,请告诉我们,我认为应该如此,但您可能需要不同的东西。

答案 1 :(得分:0)

您是否尝试过转发不同的东西以查看它是否返回相同的错误?

 {{ dump(theme.preview) }}
 {{ dump(theme.preview.icon_with_video_preview) }}
 {{ dump(theme.preview.icon_with_video_preview.icon_url) }}

最终,您可能需要使用twig的attribute函数访问数组键。即:

 {{ attribute(theme.preview, 'icon_with_video_preview').icon_url }}

请参阅:http://twig.sensiolabs.org/doc/functions/attribute.html