繁体   English   中英

原则2:将相关对象作为数组返回

[英]Doctrine 2: Return related objects as array

我有一个User实体,它与Tipo实体有很多关系。

我有方法来检索已经工作的相关实体,因此假设$u是我的用户, $u->getIdtipo()返回所有需要的相关对象。

现在,上面函数的结果是一个集合,但是我需要一个数组,因为我想将它作为json返回给我的调用。

我试图将->toArray()也应用于getIdtipo()的结果,但是该操作的结果是它创建了Tipo对象数组 ,而我需要一个数组数组。

是否可以将getIdtipo返回的对象集合转换为json或数组数组?

注意:我想使用getIdtipo()而不是进行自定义查询来检索相同的结果。


回答

从标记的答案开始,我实现了一个序列化器,并使用了它。

从symfony 文档 ,我运行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'));

最简单的方法是在Tipo上实现JsonSerializable ,例如:

class Tipo implements \JsonSerializable
{
    // ...

    public function jsonSerialize() {
        return [
            'some key' => $this->someValue, // ...
        ];
    }
}

这,与ArrayCollection::toArray配对就足够了。


除此之外,您可以使用某种序列化器,例如:

为什么不使用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM