Symfony2 在表单本身中创建新的实体元素
Posted
技术标签:
【中文标题】Symfony2 在表单本身中创建新的实体元素【英文标题】:Symfony2 create new entity element in the form itself 【发布时间】:2015-10-13 11:11:34 【问题描述】:我正在使用 SonataAdminBundle,我想在表单中显示一些映射信息。我的主要对象皮肤用 CmsElemnt 映射,在女巫中保存了内容。我需要在表单中访问它才能更新它。
我有这个映射信息:
皮肤.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 文档:
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`
【问题讨论】:
在控制器中使用 $this->createFormBuilder() 来创建表单并处理它们 我正在使用 SonataAdminBundle 【参考方案1】:您不必创建自定义表单来管理您的关系。您可以使用 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
【讨论】:
以上是关于Symfony2 在表单本身中创建新的实体元素的主要内容,如果未能解决你的问题,请参考以下文章