2012-08-27 14 views
6

उदाहरण के लिए मैं 3 संस्थाओं है:सोनाटा व्यवस्थापक बंडल प्रकार संग्रह अनुकूलन

  • श्रेणी
  • उपश्रेणी
  • उत्पाद

SonataAdminBundle में मैं उपश्रेणी जबकि जोड़ने में सक्षम होना चाहते हैं संपादन श्रेणी और उत्पाद उपश्रेणी संपादित करते समय।

मैं क्षेत्रों बनाई गई इस विचार के बाद, लेकिन SonataAdminBundle उन लोगों के साथ चलना प्रारंभ हो जाता "इंसेप्शन"।

जब मैं श्रेणी खोलने मैं संबंधित उपश्रेणियों जो संबंधित उत्पाद शामिल देखते हैं।

मैं कैसे इस मामले में "उत्पाद" क्षेत्र में कटौती कर सकते हैं?

अद्यतन:

मेरे वर्गों (सरलीकृत) इस तरह दिखेगा: enter image description here और AdminBundle में यह इस तरह दिखता है: enter image description here

उत्तर

5

// .../CoreBundle/Admin/CategoryAdmin.php 
protected function configureFormFields(FormMapper $formMapper) { 
    $formMapper 
    ->add('name', null, array('required' => true)) 
    ->add('url', null, array('required' => true)) 
    ->add('subcategories', 'sonata_type_collection', array('by_reference' => true),  array(
    'edit' => 'inline', 
    'sortable' => 'pos', 
    'inline' => 'table',)); 
} 


// .../CoreBundle/Admin/SubcategoriesAdmin.php 
protected function configureFormFields(FormMapper $formMapper) 
{ 
    $formMapper 
      ->add('name', null, array('label' => 'name')) 
      ->add('category_id', null, array('label' => 'Category')) 
      ->add('url', null, array('label' => 'Url')) 
      ->add('products', 'sonata_type_collection', 
        array('by_reference' => false), 
        array(
         'edit' => 'inline', 
         'sortable' => 'pos', 
         'inline' => 'table', 
       )); 
} 

// .../CoreBundle/Admin/ProductsAdmin.php 
protected function configureFormFields(FormMapper $formMapper) { 
    $formMapper 
      ->add('name', null, array('label' => 'Заголовок')) 
      ->add('subcategory_id', null, array('label' => 'Subcategory')); 
} 

स्कीमा इस तरह दिखता है क्यों आप इन पंक्तियों के साथ कुछ कोशिश मत करो:

// .../CoreBundle/Admin/SubcategoriesAdmin.php 
protected function configureFormFields(FormMapper $formMapper) 
{ 
    $formMapper 
      ->add('name', null, array('label' => 'name')) 
      ->add('category_id', null, array('label' => 'Category')) 
      ->add('url', null, array('label' => 'Url')); 

    // only show the child form if this is not itself a child form 
    if (!$formMapper->getFormBuilder()->getForm()->hasParent()) { 
     $formmapper 
      ->add('products', 'sonata_type_collection', 
        array('by_reference' => false), 
        array(
         'edit' => 'inline', 
         'sortable' => 'pos', 
         'inline' => 'table', 
       )); 
    } 
} 
1

@likeitlikeit द्वारा दिया गया समाधान symfony2.0 के लिए काम नहीं करता है।

किसी तरह, hasParent() हमेशा अवास्तविक लौटाते।

समाधान के लिए:

if (!is_numeric($formMapper->getFormBuilder()->getForm()->getName())) {} 

एक संग्रह में नाम सांख्यिक हो जाएगा (0, 1, 2, ...), जबकि एक में एकल के रूप में यह एक हैश किया जाएगा।

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