2016-11-29 4 views
0

私はと多対多の関係を持つUserエンティティを持っています。Tipoエンティティ。Doctrine 2:関連するオブジェクトを配列として返します

すでに働いている関連するエンティティを取得する方法があるので、$uが私のユーザであると仮定すると、$u->getIdtipo()は、すべての必要な関連オブジェクトを返します。

上記の関数の結果はコレクションですが、私は呼び出しにjsonとして返すので、配列が必要です。

Iは、getIdtipo()の結果にも->toArray()を適用するためにしようと試みたが、その操作の結果は、私は、アレイのアレイを必要としながら、それは、ティポオブジェクトの配列を作成することです。

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')); 

答えて

2

を簡単な方法は次のようにTipoJsonSerializableを実装することであろう。


その他の場合は、シリアライザなどを使用できます。:

+0

ありがとうございます。私はそれを見て、[それ](https://symfony.com/doc/current/components/serializer.html)のことを私がやったのです。私は答えを示すために私の質問を更新しています。コレクション全体をシリアライズするBtwは必要ありません。 'toArray' – GiuServ

0

なぜSymfony\Component\HttpFoundation\JsonResponseを使用しませんか?

あなたはこのような何か行うことができます:

use Symfony\Component\HttpFoundation\JsonResponse; 

$response = new JsonResponse(); 
$response->setData(array(
    'data' => $u->getIdtipo() 
)); 

次にあなたが応答を返すことができます。

return $response; 

ない場合は、JMSSerializerBundleを利用することができます。一度インストールすると、あなたが何かを行うことができます:ArrayCollection::toArrayとペアになって、これは、十分なはず

class Tipo implements \JsonSerializable 
{ 
    // ... 

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

$serializer = $container->get('jms_serializer'); 
$serializer->serialize($data, $format); 
$data = $serializer->deserialize($inputStr, $typeName, $format); 
+0

はどちらも機能しません。以前と同じように '{" data ":{}}"を返します。さらに、 ''data' => $ u-> getIdtipo();の後にコードに誤字があります;'; 'を削除してください; – GiuServ

関連する問題