【发布时间】: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
标签: php forms symfony sonata-admin sonata