1

JMSSerializerBundle に問題があります。

私はそこに私のエンティティAGVoteを持っています:

<?php

namespace K\AGBundle\Entity;

use JMS\SerializerBundle\Annotation\Type;
use JMS\SerializerBundle\Annotation\Accessor;
use JMS\SerializerBundle\Annotation\AccessType;
use JMS\SerializerBundle\Annotation\Exclude;
use JMS\SerializerBundle\Annotation\ExclusionPolicy;
use Doctrine\ORM\Mapping as ORM;


/**
 * K\AGBundle\Entity\AGVote
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 * 
 */


/*
 * 
/** @AccessType("public_method") */

class AGVote
{


   /**
* @Type("integer") 
* @Accessor(getter="getId") 
*/

 /**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
public $id;

 /**
 * @ORM\Column(type="text")
  * @Accessor(getter="getQuestion")
  * @Type("text")
 */
public $question;

/**
 * @ORM\Column(type="smallint")
 * @Type("integer")
 * @Accessor(getter="getActif")
 */
public $actif;

 /**
 * @ORM\ManyToOne(targetEntity="\K\KBundle\Entity\Users", cascade={"all"})
  * @Exclude
 */
protected $users;



/**
 * Get id
 *
 * @return integer 
 */
public function getId()
{
    return $this->id;
}

/**
 * Set question
 * Nb : Only AG admin can set a question
 * @param text $question
 */
public function setQuestion($question)
{
    $this->question = $question;
}

/**
 * Get question
 *
 * @return text 
 */
public function getquestion()
{
    return $this->question;
}

/**
 * Set actif
 *
 * @param smallint $actif
 */
public function setActif($actif)
{
    $this->actif = $actif;
}

/**
 * Get actif
 *
 * @return smallint
 */
public function getActif()
{
    return $this->actif;
}

 /**
 * Set Users
 *
 * @param K\KBundle\Entity\Province $Users
 */
public function setUsers(\K\KBundle\Entity\Users $users)
{
    $this->users = $users;
}

/**
 * Get Users
 *
 * @return K\KBundle\Entity\Users
 */
public function getUsers()
{
    return $this->users;
}

  public function __toString()
{
   return $this->getquestion();
}

}

Json で AGVote エンティティを返すだけのコントローラーを作成しました。

   public function jsonvoteAction($id) {
  $em = $this->getDoctrine()->getEntityManager();
  $entity = $em->getRepository('KAGBundle:AGVote')->findOneById($id);

  if ($entity->getActif() == 1) {
     $serializer = $this->container->get('serializer');
     $serializer->serialize($entity, 'json');
     $response = new Response($serializer);

     return $reponse;
     }
     }

Jsonで応答がありますが、次のようなエラーです:

[{"メッセージ":"レスポンスの内容は、__toString() を実装する文字列またはオブジェクトでなければなりません。指定された \"オブジェクト\".","class":"UnexpectedValueException","trace":

実際、すべてのエンティティ内に __toString() メソッドを既に実装しています。

誰にもアイデアはありますか?

ありがとうございます :)

4

1 に答える 1

8

serializeでメソッドを呼び出すと$serializer、シリアル化されたデータ(文字列)が返されます。問題は、この戻り値を使用せず、$serializerそれ自体で応答を作成することです。これは意味がありません。

まず、シリアル化された$entityを保存します。

$serializedEntity = $serializer->serialize($entity, 'json');

次に、文字列を使用して新しい応答を返すことができます。

return new Response($serializedEntity, 200, array('Content-Type' => 'application/json'));
于 2012-08-24T22:47:04.630 に答える