我有一个用户实体,与 Tipo 实体有很多关系。
我有检索已经工作的相关实体的方法,因此假设$u
是我的用户,$u->getIdtipo()
会返回所有想要的相关对象。
现在,上面函数的结果是一个集合,但我需要一个数组,因为我想将它作为json返回给我的调用。
我尝试将->toArray()
应用于getIdtipo()
的结果,但该操作的结果是它创建 Tipo <的数组 / strong>对象,而我需要一个数组数组。
是否可以将getIdtipo
返回的对象集合转换为json或数组数组?
注意:我想使用getIdtipo()
而不是自定义查询来检索相同的结果。
答案
从标记答案开始,我实现了一个序列化程序,并使用它。
从symfony documentation开始,我运行composer require symfony/serializer
我在主控制器中创建了一个序列化的功能,这就是我所做的:
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
public function serialize($data, $format){
$encoders = array(new XmlEncoder(), new JsonEncoder());
$normalizers = array(new ObjectNormalizer());
$serializer = new Serializer($normalizers, $encoders);
return $serializer->serialize($data, $format);
}
然后只需返回用户的 tipo
$this->serialize($u->getIdtipo(), 'json'));
答案 0 :(得分:2)
简单的方法是在Tipo
上实施JsonSerializable
,例如:
class Tipo implements \JsonSerializable
{
// ...
public function jsonSerialize() {
return [
'some key' => $this->someValue, // ...
];
}
}
这一点,与ArrayCollection::toArray
配对就足够了。
除此之外,您可以使用某种序列化程序,例如:
答案 1 :(得分:0)
为什么不使用Symfony\Component\HttpFoundation\JsonResponse
?
你可以这样做:
use Symfony\Component\HttpFoundation\JsonResponse;
$response = new JsonResponse();
$response->setData(array(
'data' => $u->getIdtipo()
));
然后你可以回复:
return $response;
如果没有,那么您可以使用JMSSerializerBundle。安装完成后,您可以执行以下操作:
$serializer = $container->get('jms_serializer');
$serializer->serialize($data, $format);
$data = $serializer->deserialize($inputStr, $typeName, $format);