2014-10-05 4 views
27

मेरी समस्या निम्न है। मैं सिम्फनी के साथ सोनाटा एडमिन का उपयोग कर रहा हूं। व्यवस्थापक अनुभाग में, जब मैं एक इकाई बनाने का प्रयास करें, कुछ भी नहीं दिखाई देता है जब मैं बटन जोड़ें (वर्तनी "Ajouter") पर क्लिक करें:मैं नेस्टेड व्यवस्थापक के अंदर एक इनलाइन संपादन कैसे कर सकता हूं?

enter image description here

मैं निम्नलिखित त्रुटि मिलती है: क्रोम कंसोल

में Call to a member function getName() on a non-object

Video ---OneToOne--> String ---OneToMany--> LocalizedString 

सीधे शब्दों में, मैं एक वीडियो है कि एक शीर्षक होगा और इस शीर्षक अनुवाद किया जाएगा:

यहाँ कैसे मेरी संस्थाओं पदानुक्रम है, मैं तीन वस्तुओं है कि निम्नलिखित तरीके से एक साथ जुड़े हुए हैं। यहाँ मेरी संस्थाओं हैं:

LocalizedString

OSC\UtilsBundle\Entity\LocalizedString: 
    type: entity 
    table: null 
    repositoryClass: OSC\UtilsBundle\Entity\LocalizedStringRepository 
    id: 
     id: 
      type: integer 
      id: true 
      generator: 
       strategy: AUTO 
    fields: 
     locale: 
      type: string 
      length: '20' 
     content: 
      type: string 
      length: 255 

    manyToOne: 
     parent: 
      targetEntity: String 
      mappedBy: localizedObjects 


    lifecycleCallbacks: { } 

स्ट्रिंग

OSC\UtilsBundle\Entity\String: 
    type: entity 
    table: null 
    repositoryClass: OSC\UtilsBundle\Entity\StringRepository 
    id: 
     id: 
      type: integer 
      id: true 
      generator: 
       strategy: AUTO 

    oneToMany: 
     localizedObjects: 
      targetEntity: LocalizedString 
      mappedBy: parent 
      cascade: ["persist", "remove"] 

    lifecycleCallbacks: { } 

वीडियो

OSC\MySportBundle\Entity\Video: 
    type: entity 
    table: null 
    repositoryClass: OSC\MySportBundle\Entity\VideoRepository 
    id: 
     id: 
      type: integer 
      id: true 
      generator: 
       strategy: AUTO 

    oneToOne: 
     title: 
      targetEntity: OSC\UtilsBundle\Entity\String 
      cascade: ["persist", "remove"] 

    lifecycleCallbacks: { } 

तो, मैंने सोनाटाएडमिन में संपादन की सुविधा के लिए यह संरचना की। यदि, व्यवस्थापक डैशबोर्ड के माध्यम से, मैं एक स्ट्रिंग को संपादित करना चाहता हूं, मैं आसानी से एक स्ट्रिंग संपादित कर सकता हूं और इसे कई भाषाओं में अनुवाद कर सकता हूं (यह पहले से ही काम करता है)।

हालांकि, जब मैं वीडियो व्यवस्थापक में ऐसा करने का प्रयास करता हूं, ऐसा लगता है कि मैं स्ट्रिंग ऑब्जेक्ट के इनलाइन संपादन (ऐड बटन पर क्लिक नहीं करता) पर क्लिक नहीं कर सकता।

$formMapper 
     ->add('title', 'sonata_type_admin', array('delete' => false, 'btn_add' =>false), array(
      'edit' => 'inline', 
      'inline' => 'table', 
     )); 

मैं क्या पाया है से, यह दो imbricated रूपों की तरह दिखता है कर रहे हैं संभव नहीं:

यहाँ वीडियो व्यवस्थापक कक्षा में प्रासंगिक कोड है? क्या उस प्रतिबंध को रोकने का कोई तरीका है? या शायद यह मेरा डिजाइन है जो बहुत अच्छा नहीं है?

Edit1: ऐसा लगता है एक पैच GitHub पर आ रहा है की तरह: https://github.com/sonata-project/SonataAdminBundle/pull/1971#issuecomment-58023124

किसी को भी जानता है मैं इसे कैसे उपयोग कर सकते हैं मुझे खुशी होगी।

+0

बस 'sonata_type_model' का उपयोग करें और बेहतर नियंत्रण प्राप्त करने के लिए इसके संबंधित विकल्पों को पास करें –

+0

क्या आपने 'इनलाइन' => 'table'' के साथ sonata_type_admin के बजाय sonata_type_collection के साथ' इनलाइन '=>' मानक'' का प्रयास किया है? –

+0

और आपकी स्ट्रिंगएडमिन भी क्या है? –

उत्तर

-3

आपने कहा था कि क्रोम कंसोल त्रुटि देता है:

Call to a member function getName() on a non-object 

तो इस त्रुटि जावास्क्रिप्ट से नहीं है?

यदि PHP से त्रुटि का अर्थ है कि जब आप $ ऑब्जेक्ट-> getName() (ओएससी \ UtilsBundle \ Controller में उस फ़ाइल को खोजने के लिए फ़ाइल संपादक में Ctr + f "getName()" का उपयोग करना चाहिए) $ ऑब्जेक्ट एक वस्तु नहीं है, जो ऐसा कर सकती है क्योंकि आप शायद ऑब्जेक्ट सरणी प्राप्त कर सकते हैं, एकल वस्तु नहीं। var_dump($object); जोड़ने का प्रयास करें और आप देखते हैं कि यह क्या है।

0

रूप नक्शाकार में इस प्रयास करें:

$formMapper 
     ->add('title', 'sonata_type_model_list', array(
        'class' => 'YourBundle:String', 
        'required' => false, 
        'delete' => false, 
        'btn_add' =>true, 
       ), array(
        'edit' => 'inline', 
        'inline' => 'table', 
       )) 
      ; 

त्रुटि Doctrine2 प्रलेखन पर एक नज़र प्राप्त करने की कोशिश बनी रहती हैं: Doctrine2 One to One association mapping और फिर अपने संस्थाओं

0

अपने कोड में उत्पन्न आप delete उपयोग कर रहे हैं जो वैध विकल्प नहीं है। शायद आप 'btn_delete' => false सभी मान्य विकल्पों here के लिए प्रलेखन की जांच कर सकते हैं।

यदि यह काम नहीं कर रहा है, तो शायद sonata_type_collection आपकी समस्या का समाधान है। सुनिश्चित करें कि आप by_reference विकल्प का उपयोग अपने संबंध के आधार पर सही तरीके से कर रहे हैं।

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

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