簡體   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