gpt4 book ai didi

arrays - Symfony3 从查询返回数组到 json

转载 作者:行者123 更新时间:2023-12-05 00:55:37 24 4
gpt4 key购买 nike

我有问题,我无法将我的帖子数组返回到 json,因为 symfony 返回带有实体对象的数组?

它是我的代码:

public function indexAction()
{
$em = $this->getDoctrine()->getManager();

$posts = $em->getRepository('AppBundle:Post')->findAll();

return $this->json($posts);
}

我使用 $this->json 是返回 json 数据,在 sf3 上添加了功能。
但这是我的结果:
[
{},
{},
{}
]

我想加载我的帖子。

附言。我知道,我可以使用查询生成器和方法 toArray 或其他东西,但是有什么方法可以使用和干燥吗?谢谢

最佳答案

因为实体可以有多个边界,代理对象和相关实体,我个人更喜欢显式指定要序列化的内容,像这样:

use JsonSerializable;

/**
* @Entity
*/
class SomeEntity implements JsonSerializable
{
/** @Column(length=50) */
private $title;

/** @Column(length=50) */
private $text;

public function jsonSerialize()
{
return array(
'title' => $this->title,
'text' => $this->text,
);
}
}

然后它就像 json_encode($someEntityInstance); 一样简单.

您可以使用 JMSSerializerBundle以及完成您的任务 DRY。

此外,还可以选择编写自己的序列化程序来规范化数据。

更新:

如果您想要 JSON 的多种表示形式,可以这样实现:
use JsonSerializable;

/**
* @Entity
*/
class SomeEntity implements JsonSerializable
{
// ...

protected $isList;

public function toList()
{
$this->isList = TRUE;

return $this;
}

private function jsonSerializeToList()
{
return [ // array representing list... ]
}

public function jsonSerialize()
{
if( $this->isList ) {
$normalized = $this->jsonSerializeToList();
} else {
$normalized = array(
'title' => $this->title,
'text' => $this->text,
);
}

return $normalized;
}
}

并称为 json_encode($someEntityInstance->toList()); .无论如何,这有点脏,所以我建议与界面的想法保持一致。

关于arrays - Symfony3 从查询返回数组到 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37761729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com