2013-05-23 6 views
8

मैं सिम्फनी और एफओएसआरएस्टबंडल के साथ एक शानदार ऐप बना रहा हूं। FOSRestBundle जेएसएस सेरिआज़लाइज़र का उपयोग जेसन प्रारूप में डेटा क्रमबद्ध करने के लिए करता है। मेरे पास सब कुछ एक छोटी सी समस्या के साथ काम कर रहा है।जेएमएस सीरिएलाइज़र एक संपत्ति का पर्दाफाश नहीं करता

यह मेरी इकाई वर्ग

/** 
* Post 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="Tomalo\AdminBundle\Entity\PostRepository") 
* @ExclusionPolicy("none") 
*/ 
class Post 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="content", type="text") 
    * @Assert\NotBlank() 
    */ 
    private $content; 

    /** 
    * @var float 
    * 
    * @ORM\Column(name="lat", type="float") 
    * @Assert\NotBlank() 
    */ 
    private $lat; 

    /** 
    * @var float 
    * 
    * @ORM\Column(name="lon", type="float") 
    * @Assert\NotBlank() 
    */ 
    private $lon; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="date", type="datetime") 
    */ 
    private $date; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="sign", type="string", length=50, nullable=true) 
    * @Expose 
    */ 
    private $sign; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="status", type="integer") 
    */ 
    private $status=0; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="points", type="integer") 
    */ 
    private $points=0; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="uuid", type="string", length=43) 
    * @Assert\NotBlank() 
    * @Exclude 
    */ 
    private $uuid; 


    private $owner; 


    //get/set method continue 

है और इस json है मैं:

{ 
      "id": 5, 
      "content": "zxcvzxcvzxc", 
      "lat": 37.422005, 
      "lon": -122.084095, 
      "date": "2013-05-20T05:06:57+0100", 
      "status": 0, 
      "points": 0, 
      "owner": 0 
     } 

मेरी इकाई $ UUID में केवल संपत्ति @Exclude एनोटेशन haveing ​​है और वहाँ के रूप में उम्मीद नहीं है, लेकिन $ हस्ताक्षर संपत्ति भी गायब है। जैसा कि आप देखते हैं मैंने @ साइन इन करें $ हस्ताक्षर पर हस्ताक्षर किए लेकिन कुछ भी नहीं बदला। मैं @ExclusionPolicy का उपयोग कर ("सभी") और सभी UUID के अलावा बेनकाब करने की कोशिश की, लेकिन मैं

Warning: json_encode(): recursion detected in E:\workspace\htdocs\tomalo\vendor\jms\serializer\src\JMS\Serializer\JsonSerializationVisitor.php line 29 

हो रही है के रूप में यह कुछ php bug

किसी भी विचार क्या गलत है और कैसे तय करने के लिए है मैं कुछ जानकारी मिली यह?

+1

मैं बजाय टिप्पणियों का उपयोग करने की वजह से अलग फ़ाइलें (xml/YML) में क्रमबद्धता और सिद्धांत मैपिंग विन्यस्त करने की सलाह देंगे यह आसान विस्तार और बंडल विरासत की अनुमति देता है लेकिन यह व्यक्तिगत वरीयता का मामला है ... बस मेरे कुछ सेंट – nifr

+0

धन्यवाद, मैं विचार करूंगा। यह वास्तव में अच्छा है सिम्फनी कॉन्फ़िगरेशन और सामान लिखने के लिए कुछ प्रारूप प्रदान करता है लेकिन यह डबल धार तलवार है। – Gustek

उत्तर

9

आप खाली तारों के रूप में नल को क्रमबद्ध कर सकते हैं। यह आप थोड़ा

$context = new SerializationContext(); 
$context->setSerializeNull(true); 
$objectData = $serializer->serialize($object, 'json', $context); 

मदद FOSRestBundle के लिए लगता है कि आप सेटिंग्स

fos_rest: 
    view: 
     serialize_null: true 
+0

मैंने कॉन्फ़िगरेशन में serialize_null सेट किया है लेकिन इसका कोई प्रभाव नहीं पड़ा। – Gustek

+0

आप जेएमएस/सीरिएलाइज़र-बंडल का किस संस्करण का उपयोग कर रहे हैं? पहले उदाहरण –

+0

में शुद्ध धारावाहिक के साथ इकाई को क्रमबद्ध करने का प्रयास करें मेरे पास संगीतकार में देव-मास्टर है जो अभी अपडेट नहीं हुआ है। अगर मैं सीधे आपके पहले उदाहरण में सेरिलाइज़र का उपयोग करता हूं तो यह काम करता है, हालांकि यह एक मूल्य के रूप में शून्य को खाली स्ट्रिंग नहीं देता है जैसा कि मैं पसंद करूंगा। मदद के लिए धन्यवाद, मैंने क्लाइंट में इसे स्वीकार कर लिया है क्योंकि यह अब है और इसके साथ जारी है। – Gustek

7

forgottenbasFOSRestBundle के लिए 'तों घोल में परिभाषित कर सकते हैं मेरे लिए काम नहीं किया। मैं अपने config में एक समाधान यहाँ https://github.com/FriendsOfSymfony/FOSRestBundle/pull/480

उपयोग serializer अनुभाग, नहीं view पाया है:

fos_rest: 
    serializer: 
     serialize_null: true 
+0

धन्यवाद, शायद मुझे डिबगिंग के घंटे बचाए! :-) –

संबंधित मुद्दे