【发布时间】:2014-03-04 22:45:04
【问题描述】:
我有一个支持票的实体: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”类中具有公共访问权限\Entity\SupportTicket”。
是的,这是有道理的。它应该是那里的 addSupportEntries() 方法。那么如何告诉表单生成器使用 addSupportEntries 而不是 setSupportEntries?
提前致谢
【问题讨论】:
-
很确定使用集合可以完成这项工作。 ->add('supportEntries', 'collection', array('type' => new SupportEntryType())) symfony.com/doc/current/cookbook/form/form_collections.html
-
谢谢。这看起来像是要走的路,但我不知道如何渲染文本区域。如果我将 allow_add 和 protype 包含为 true,它似乎会进入模板,但是我必须使用 Javascript 呈现该字段。然后,它不会在表单中正确传递值。目前有点卡住了。
-
在您的 SupportTicket 中添加一个 SupportEntry,以便表单系统可以处理。
标签: forms symfony doctrine-orm doctrine