Symfony2在表单本身创建新的实体元素



我正在使用SonataAdminBundle,并且在表单中我想要显示一些映射信息。我的主对象Skin被映射到CmsElemnt中,其中的内容被保存。我需要在表单中访问它以便能够更新它。

我有这样的映射信息:

Skin.php

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

CmsElement.php

/**
 * @ORMManyToOne(targetEntity="Skin", inversedBy="navbar")
 * @ORMJoinColumn(name="page_id", referencedColumnName="id")
 */
private $content;

我尝试使用symfony文档在这里:

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

所以我创建了一个服务来加载cmelement信息:
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' => 'MpShopBundleEntityCmsElement',
        ));
    }
    public function getName()
    {
        return 'skin_element_type_cms';
    }
}
注册:

skin_element_type_cms:
    class: MpShopBundleFormTypeSkinElementType
    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 `MpShopBundleAdminSkinAdmin`

您不必创建自定义表单来管理关系。您可以使用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

相关内容

  • 没有找到相关文章

最新更新