Symfony形式创建新对象并创建第一个一对多对象



我有一个支持票证实体: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) }}

为了保存支持条目,根据构建实体的方式,您可能需要进行一些额外的修改。

文档应该可以帮助您正确处理:如何嵌入表单集合

相关内容

  • 没有找到相关文章