我正在使用SonataAdminBundle,并且在表单中我想显示一些映射信息。我的主要对象Skin使用CmsElemnt进行映射,因为内容已保存。我需要在表单中访问它才能更新它。
我有这个映射信息:
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 Here:
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 :(得分: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'
))
;
}