2012-08-24 45 views
1

我有一個問題JMSSerializerBundleJMSSerializerBundleThe響應的內容必須是一個字符串或對象實現__toString()」

我有我的實體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(); 
} 

} 

我做了一個控制器,中庸之道返回我的AGVote實體JSON:

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(),\」 對象\ 「給予 」「 類 」:「 UnexpectedValueException」, 「跟蹤」:

實際上,我已經在所有實體中實現了__toString()方法。

有沒有人有想法?

謝謝你:)

+0

請,接下來的時間,需要一定的時間來正確地格式化代碼。 – AdrienBrault

回答

8

當調用serialize方法上$serializer,它返回序列化的數據(字符串)。 問題是您不使用此返回的值,並使用$serializer本身創建響應,這沒有任何意義。

首先,存儲序列化$實體:

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

然後,您可以返回與字符串中使用新的響應:

return new Response($serializedEntity, 200, array('Content-Type' => 'application/json')); 
+0

這項工作,但它是不符合我的需要的經典方式。實際上它只顯示實體的數據({「id」:89,「question」:「dg」,「actif」:1}),但不是對我的實體的引用,如:'MyNamespace \ MyObject' 我在想JMSSerializerBundle應該給我那個? – Luna

+0

你真的讀過我寫的嗎? – AdrienBrault

+0

您剛纔引用的輸出正是JMSSerializerBundle應該輸出的內容。寫出您期望的完整回覆 – AdrienBrault

相關問題