我有一个支持票证的实体:SupportTicket()。我还有一个回复每张票的条目:SupportEntry()。我在SupportTicket()和SupportEntry()之间建立了一对多的关系。
现在我要做的是构建我的表单,以便创建初始SupportTicket然后插入第一个SupportEntry,所有这些都以相同的形式。我一直在搞乱我的代码,只有一半了解我在做什么,但这就是我现在所处的位置:
// My controller, creating the form
$supportTicket = new SupportTicket();
$form = $this->createFormBuilder($supportTicket)
->add('subject', 'text', array(
'label' => 'Subject'
))
->add('jobNumber', 'text', array(
'label' => 'Job Number'
))
->add('supportGroup', 'entity', array(
'label' => 'Group',
'class' => 'ShawmutClientBundle:SupportGroup',
'property' => 'name',
'multiple' => true,
'expanded' => true
))
// ->add('supportEntries', new SupportEntryType())
->add('supportEntries', new SupportEntryType())
->add('Save', 'submit')
->getForm();
我尝试自定义表单类型
<?php
namespace Shawmut\ClientBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class SupportEntryType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('comment', 'textarea');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Shawmut\ClientBundle\Entity\SupportEntry',
));
}
public function getName()
{
return 'SupportEntryType';
}
}
表单确实有我从表单类型中提取的注释框,但是当我尝试提交表单时,我收到此错误:
属性“supportEntries”和方法“setSupportEntries()”,“_ set()”或“ _call()”之一都不存在,并且在“Me \ MyBundle”类中具有公共访问权限\实体\ SupportTicket”。
是的,这是有道理的。它应该是addSupportEntries()方法。那么如何告诉表单构建器使用addSupportEntries而不是setSupportEntries?
提前致谢
答案 0 :(得分:2)
将collection
表单类型设为go。
->add(
'supportEntries',
'collection',
array(
'type' => new SupportEntryType(),
'label' => 'Support Entries',
'error_bubbling' => true,
'cascade_validation' => true,
)
)
答案 1 :(得分:0)
如果您使用的是集合表单类型,并且未显示textarea,请添加:
'allow_add' => true
到属性array()。 代码看起来像这样:
->add(
'supportEntries',
'collection',
array(
'type' => new SupportEntryType(),
'label' => 'Support Entries',
'error_bubbling' => true,
'allow_add' => true
'cascade_validation' => true,
)
)
要显示小部件,假设您正在使用树枝:
{{ form_widget(form.supportEntries.vars.prototype.comment) }}
为了保存支持条目,根据您构建实体的方式,您可能需要进行一些额外的修改。
文档应该可以帮助您做到正确: How to Embed a Collection of Forms