2015-07-23 5 views
1

Я использую SonataAdminBundle и в форме, которую я хочу отобразить, некоторая сопоставленная информация. Мой основной объект «Кожа» сопоставляется с CmsElemnt, в котором сохраняется содержимое. Мне нужно получить его в форме, чтобы иметь возможность обновить его.Symfony2 создает новый элемент сущности в самой форме

Я это отображается информация:

Skin.php

/** 
* @ORM\OneToMany(targetEntity="CmsElement", mappedBy="content") 
*/ 
private $navbar; 

CmsElement.php

/** 
* @ORM\ManyToOne(targetEntity="Skin", inversedBy="navbar") 
* @ORM\JoinColumn(name="page_id", referencedColumnName="id") 
*/ 
private $content; 

Я попытался с помощью Symfony dcumentation здесь:

http://symfony.com/doc/current/book/forms.html#embedding-a-single-object

Так что я создал службу, чтобы загрузить информацию CmsElement:

class SkinElementType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) { 

     $builder 
      ->add('content', 'textarea'); 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'Mp\ShopBundle\Entity\CmsElement', 
     )); 
    } 

    public function getName() 
    { 
     return 'skin_element_type_cms'; 
    } 
} 

Зарегистрирован это:

skin_element_type_cms: 
    class: Mp\ShopBundle\Form\Type\SkinElementType 
    tags: 
     - { name: form.type } 

Теперь в админке кожи я делаю это:

/** 
    * @param FormMapper $formMapper 
    */ 
    protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper 
//   ->add('id', 'hidden') 
       ->add('name') 
      ->add('status', null, array('required' => false)) 
     ->add('skin_element_type_cms', new CmsElement(), array(
      'required' => false, 
      'attr' => array('cols' => '8', 'rows' => '8'))) 
} 

я получаю эту ошибку :

Please define a type for field `skin_element_type_cms` in `Mp\ShopBundle\Admin\SkinAdmin` 
+0

использование $ this-> createFormBuilder() в контроллере для создания форм и обрабатывать их – mgh

+0

Я использую SonataAdminBundle – Dominykas55

ответ

0

Вам не нужно создавать настраиваемую форму для управления вашими отношениями. Вы можете использовать sonata_type_collection для управления отношениями oneToMany.

SkinAdmin.php

protected function configureFormFields(FormMapper $formMapper) 
{ 
    $formMapper 
     ->add('name') 
     ->add('status', null, array('required' => false)) 
     ->add('navbar', 'sonata_type_collection', array(), array(
      'edit' => 'inline', 
      'inline' => 'table' 
     )) 
    ; 
} 

Проверьте официальную документацию для получения более подробной информации: https://sonata-project.org/bundles/doctrine-orm-admin/master/doc/reference/form_field_definition.html#advanced-usage-one-to-many