2012-11-21 32 views
8

तो, सोनाटा एडमिन की संपादन कार्रवाई में मैं या संदर्भ संपादित करने के आधार पर विभिन्न फॉर्म फ़ील्ड प्रदर्शित करने की कोशिश कर रहा हूं।सोनाटा के एडमिन क्लास में अंतर्निहित वस्तु कैसे प्राप्त करें जब sonata_type_admin द्वारा बुलाया जाता है?

हो सकता है कि कुछ पृष्ठभूमि पहले ..

मैं एक गैलरी इकाई और एक CoverPhoto OneToOne साथ बाध्य इकाई है।

गैलरी:

/** 
* @ORM\OneToOne(targetEntity="CoverImage", mappedBy="gallery", cascade={"all"}, orphanRemoval=true) 
**/ 
private $cover; 

CoverImage:

/** 
* @ORM\OneToOne(targetEntity="Gallery", inversedBy="cover") 
**/ 
private $gallery; 

यहाँ GalleryAdmin coresponding है वर्ग:

class GalleriesAdmin extends Admin 
{ 
    protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper 
       -> add('name', null, array('label' => 'Nazwa')) 
       -> add('category', 'sonata_type_model', array('label' => 'Kategoria'), array('subject' => $this -> getSubject())) 
       -> add('cover', 'sonata_type_admin', array('label' => 'Okładka')) 
       -> add('images', 'sonata_type_collection', array('by_reference' => false, 'label' => 'Powiązane zdjęcia'), array(
        'edit' => 'inline', 
        'sortable' => false, 
        'inline' => 'table', 
       )) 
      ; 
    } 

    //other stuff 
} 
class CoverImagesAdmin extends Admin 
{ 
    protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper 
       -> add('path', 'thumbnail', array('label' => 'Miniatura')) 
       -> add('file', 'file', array('required' => false, 'label' => 'Plik')) 
     ; 
    } 
} 

"झलक" को अपने कस्टम प्रपत्र क्षेत्र है जो झलक (घिनौना आदमी) प्रदर्शित करता है: ६५१०४०३२१० और यहाँ हम CoverImageAdmin साथ जाना। लेकिन अब मैं चाहता हूं कि यह फ़ील्ड केवल "संपादन" संदर्भ में दिखाई दे।

यह व्यवस्थापक वर्ग और हालत के

$this -> getSubject() 

विधि के साथ केक का टुकड़ा होना चाहिए। दुर्भाग्य से जब मैं coverImagesAdmin क्लास में getSubject() को कॉल करता हूं जिसका उपयोग नेस्टेड फॉर्म को प्रस्तुत करने के लिए किया जाता है, तो यह हमेशा शून्य देता है। GetParent() के साथ ही;

Fatal error: Maximum function nesting level of '500' reached, aborting! in /home/flameheart/Projects/KolberPhotography/vendor/symfony/symfony/src/Symfony/Component /OptionsResolver/Options.php on line 350

में

getForm() परिणाम कॉलिंग मैं व्यवस्थापक और FormMapper की विधि के बारे में हर कॉल करने के लिए अभी-अभी फॉर्म के संदर्भ निर्धारित करने के लिए कोशिश की, लेकिन कुछ भी नहीं के साथ समाप्त हो गया है।

क्या आपको लोगों को यह पता है कि इसे साफ तरीके से कैसे हल किया जाए?

protected function configureFormFields(FormMapper $formMapper) 
{ 

    if($this -> getRoot() -> getSubject() -> getCover() && $this -> getRoot() -> getSubject() -> getCover() -> getId()) 
    { 
     $formMapper -> add('path', 'thumbnail', array('label' => 'Miniatura', 'attr' => array('id' => 'gallery_cover_image'), 'label_attr' => array('id' => 'gallery_cover_label'))); 
    } 

    $formMapper -> add('file', 'file', array('required' => false, 'label' => 'Plik')); 
} 

इमो, इस सोनाटा बात वास्तव में दस्तावेज और आगे के विकास के बजाय पुनर्रचना का भार की जरूरत है:

+1

बस रिकार्ड के लिए, कि अधिक से अधिक नेस्टिंग स्तर त्रुटि XDebug और कुछ भी नहीं के साथ क्या करना सोनाटा व्यवस्थापक – frak

उत्तर

17

मैं इसे इस तरह से करना करने में कामयाब रहे।

+0

Flameheart के साथ क्या करना है, तो इससे आपके प्रश्न का हल आप इस जवाब के रूप में मान्य निशान चाहिए। घणी खम्मां! – Airam

+5

मैं रिफैक्टरिंग के बारे में सहमत हूं। –

6

यह एक पुराने सवाल है मुझे पता है, लेकिन स्पष्ट तरीका मैं ऐसा करने का पाया है है:

$this->id($this->getSubject()) 

यह यह एक संपादन रूप है सच देता है, तो अगर यह गलत है, यह एक बनाने है प्रपत्र।

+0

इसके लिए धन्यवाद। मैंने आपके ब्लॉग में अपना समाधान जोड़ा: http: //blog.webdevilopers।net/how-to-check-if-subject-is-new-resp-action-is-create-or-edit-in-sonata-admin/- इसके अलावा आप इसे अपने टेम्पलेट के अंदर {% अगर व्यवस्थापक के साथ देख सकते हैं .id (ऑब्जेक्ट) शून्य%} नहीं है। – webDEVILopers

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

  • कोई संबंधित समस्या नहीं^_^