我有一個支持門票的實體:SupportTicket()。我還有一個回覆每張票的條目:SupportEntry()。我在SupportTicket()和SupportEntry()之間建立了一對多的關係。Symfony窗體創建新對象並創建第一個一對多對象
現在我想要做的是構建我的窗體,以便它創建初始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';
}
}
形式確實有,我已經從表單類型拉在評論框,但是當我嘗試提交表單,我得到這個錯誤:
Neither the property "supportEntries" nor one of the methods "setSupportEntries()", "_set()" or "_call()" exist and have public access in class "Me\MyBundle\Entity\SupportTicket".
,是的,這是有道理的。它應該是那裏的addSupportEntries()方法。那麼如何告訴表單構建器使用addSupportEntries而不是setSupportEntries?
在此先感謝
很肯定使用集合將做的工作。 - > add('supportEntries','collection',array('type'=> new SupportEntryType()))http://symfony.com/doc/current/cookbook/form/form_collections.html – Cerad
謝謝。這看起來像要走的路,但我無法弄清楚如何渲染textarea。它似乎進入模板,如果我將allow_add和protype包含爲true,但是必須使用Javascript呈現該字段。然後,它不會在表單中正確傳遞值。有點卡住了。 – Dominick
將SupportEntry添加到您的SupportTicket中,以便表單系統可以處理某些事情。 – Cerad