2011-08-10 16 views
6

पर सैक्फोनी निर्यात IOS ऐप के लिए वेब सेवा (JSON) बनाने के लिए मैं सिम्फनी 2 का उपयोग कर रहा हूं।सिम्फनी 2 JSON

मेरी इकाई लाने के लिए मुझे क्या:

$articles = $this->getDoctrine()->getRepository('UdoPaddujourBundle:MenuArticle')->findAll(); 

मैं तुम्हें बताना होगा कि:

Fatal error: Call to a member function toArray() on a non-object 

यही बात

साथ happends:

$article = array(); 
$article = $articles->toArray(); 

मुझे निम्न त्रुटि देता है

$article = $articles->exportTo('json'); 

मैं जेसन प्रतिक्रिया कैसे बना सकता हूं?

सधन्यवाद, Cearnau दान

संपादित करें: var_dump ($ लेख) =

array(18) { 
    [0]=> 
    object(Udo\PaddujourBundle\Entity\MenuArticle)#50 (4) { 
    ["id":"Udo\PaddujourBundle\Entity\MenuArticle":private]=> 
    int(1) 
    ["name":"Udo\PaddujourBundle\Entity\MenuArticle":private]=> 
    string(17) "My Article Name 1" 
    ["description":"Udo\PaddujourBundle\Entity\MenuArticle":private]=> 
    string(26) "My Article Description 1" 
    ["price":"Udo\PaddujourBundle\Entity\MenuArticle":private]=> 
    float(20) 
    } 
    [1]=> ... 

- बाद में संपादित

कैसे कर सकते हैं मैं सभी "संपत्ति के नाम" के माध्यम से लूप?

$myarray=array(); 
$myArray["name"]=array(); 
$myArray["description"]=array(); 
foreach($articles in $article) 
{ 
    array_push($myArray["name"], $article->getName()); 
    array_push($myArray["description"], $article->getDescription()); 
} 
+0

क्या आप 'var_dump ($ लेख) देता है,'? – hakre

+0

सरणी (18) { [0] => वस्तु (उडो \ PaddujourBundle \ इकाई \ MenuArticle) # 50 (4) { [ "id": "उडो \ PaddujourBundle \ इकाई \ MenuArticle": निजी] => int (1) ["नाम": "उडो \ पैडुजोरबंडल \ Entity \ MenuArticle": निजी] => स्ट्रिंग (17) "मेरा आलेख नाम 1" ["विवरण": "उडो \ PaddujourBundle \ Entity \ MenuArticle" : निजी] => स्ट्रिंग (24) "मेरे लेख विवरण 1" [ "कीमत": "उडो \ PaddujourBundle \ इकाई \ MenuArticle": निजी] => नाव (20) } [1] => ** और इसलिए टिल पर [17] ** –

+0

आपको 'json_encode ($ articles) क्या देता है; '? – hakre

उत्तर

3

आप एक सिम्फोनी 1.x पृष्ठभूमि से आ रहे हैं, वहाँ एक बहुत सहायकों सरणियों और इसके आगे कन्वर्ट करने के लिए सहित था और अधिक "जादू" संस्थाओं के लिए उपलब्ध है,: यह मैं क्या मिल गया है है ।

सिम्फनी 2 में, अधिकांश जादू चला गया है; विशेष रूप से संस्थाएं अब पुरानी पुरानी PHP ऑब्जेक्ट्स हैं जो डेटाबेस के लिए दृढ़ता के लिए डॉक्टर 2 द्वारा प्रबंधित की जाती हैं, जिसका अर्थ है कि toArray() जैसे आपके डोमेन ऑब्जेक्ट पर उपलब्ध विधियां हैं, आपको उन्हें स्वयं लागू करना होगा। यह करने के लिए काफी छोटा होना चाहिए - बस ("name of property" => "value of property") के साथ एक कुंजी-मूल्य सरणी लौटाएं ... यदि आपके पास अन्य संस्थाओं के साथ संबंध स्थापित हैं, तो आपको उन पर toArray() विधि भी लागू करने की आवश्यकता होगी, और बस इसे कॉल करें जब आप कनवर्ट कर रहे हैं तो मुख्य इकाई।

फिर, आपके ऑब्जेक्ट सरणी के बाद, $json = json_encode($array); आपको आपकी प्रतिक्रिया के रूप में भेजने के लिए JSON स्ट्रिंग देगा।

+1

मैं सभी "संपत्ति के माध्यम से कैसे लूप कर सकता हूं नाम "? सबसे अच्छा मैं कोड यह '$ myarray = सरणी() है; $ MyArray [ "नाम"] = सरणी(); $ MyArray [ "विवरण"] = सरणी(); foreach ($ लेख में $ लेख) {array_push ($ myArray ["name"], $ article-> getName()); array_push ($ myArray ["description"], $ article-> getDescription()); } ' –

14

आप एक सिद्धांत क्वेरी का उपयोग करते हैं तो आप भी ऐसा कर सकते हैं:

$em = $this->getDoctrine()->getEntityManager(); 
    $query = $em->createQuery('SELECT ma FROM UdoPaddujourBundle:MenuArticle ma ...etc'); 
    $myArray = $query->getArrayResult(); 

और फिर json_encode ($ myArray); अधिक जानकारी के

+1

धन्यवाद यह काम करता है लेकिन यह" GetRepository() "मेटोड की तुलना में बहुत बुरा है। लेकिन अगर यह एक जेसन प्रतिक्रिया प्राप्त करने का एकमात्र आसान तरीका है तो मुझे इससे निपटना होगा। –

+1

आप विधि को एक कस्टम भंडार में ले जा सकते हैं और फिर आपको इसे देखना नहीं होगा ;-) – codecowboy

+0

या इसे देखें: http://stackoverflow.com/questions/6706485/how-to-encode- सिद्धांत-संस्थाएं-टू-जेसन-इन-सिम्फनी-2-0-AJAX-application – codecowboy

0

आप json_encode($articles) उपयोग कर सकते हैं जब आप इकाई (या किसी अन्य वस्तु) को लागू करता है JsonSerializable के लिए here देखें:

<?php 

namespace My\AppBundle\Entity; 

use JsonSerializable; 

class Channel implements JsonSerializable 
{ 

    /* 
    * All your fields, getters and setters. 
    */ 

    /** 
    * Returns serializable items. 
    * 
    * @return array 
    */ 
    public function jsonSerialize() 
    { 
     return [ 
      'name' => $this->getName(), 
      'description' => $this->getDescription(), 
     ]; 
    } 
}