我有一个支持票证实体: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 ShawmutClientBundleFormType;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolverInterface;
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' => 'ShawmutClientBundleEntitySupportEntry',
));
}
public function getName()
{
return 'SupportEntryType';
}
}
表单确实有我从表单类型中提取的评论框,但当我尝试提交表单时,我会收到以下错误:
属性"supportEntries"和方法"setSupportEntries()"、"_set()"或">_call()"都不存在,并且在类"Me\MyBundle\Entity\SupportTicket"中具有公共访问权限。
是的,这很有道理。它应该是存在的addSupportEntries()方法。那么,我如何告诉表单生成器使用addSupportEntries而不是setSupportEntries呢?
提前感谢
尝试collection
表单类型。
->add(
'supportEntries',
'collection',
array(
'type' => new SupportEntryType(),
'label' => 'Support Entries',
'error_bubbling' => true,
'cascade_validation' => true,
)
)
如果您使用的是收集表单类型,并且文本区域没有显示,请添加:
'allow_add' => true
到属性array()。代码看起来像这样:
->add(
'supportEntries',
'collection',
array(
'type' => new SupportEntryType(),
'label' => 'Support Entries',
'error_bubbling' => true,
'allow_add' => true
'cascade_validation' => true,
)
)
要显示小部件,假设您使用的是trick:
{{ form_widget(form.supportEntries.vars.prototype.comment) }}
为了保存支持条目,根据构建实体的方式,您可能需要进行一些额外的修改。
文档应该可以帮助您正确处理:如何嵌入表单集合