我有一個擴展AbstractType的PostType表單。在控制器中,如果滿足某些條件,我想添加一個字段。我能以某種方式做到這一點,或者是否有另一種修改控制器中FormType的最佳做法?我可以動態地將字段添加到FormType表單嗎?
感謝
我有一個擴展AbstractType的PostType表單。在控制器中,如果滿足某些條件,我想添加一個字段。我能以某種方式做到這一點,或者是否有另一種修改控制器中FormType的最佳做法?我可以動態地將字段添加到FormType表單嗎?
感謝
您可以使用Form Events。
當然您可以使用表單中的集合類型動態添加字段。 請參閱下面的鏈接,這將幫助您如何動態創建字段。
Link1: Dynamic Field in Symfony2
Link2: Form Collection in symfony2 doc
希望這兩個環節可以幫助你。 快樂編碼..
集合?我不確定這是我尋找的。 – DavidW 2012-02-18 17:37:43
讓說你有類型的表單文件類型如下:
<?php
namespace EventFlowAnalyser\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class FileType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', 'text', array('label' => 'Name'));
}
public function getName()
{
return 'file';
}
}
你可以用它在你的控制器是這樣的:
$form = $this->createForm(new FileType(), $document);
凡$文件是一個對象包含一個字段(名稱)。 現在,如果您需要將字段添加到其他函數中的表單對象,則可以擴展FileType以添加所需的字段;例如,如果要編輯名稱字段但仍想跟蹤以前的狀態,可以添加一個original_name字段。
<?php
namespace EventFlowAnalyser\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use EventFlowAnalyser\Form\EventListener\EditFileFieldSubscriber;
class FileEditType extends FileType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder->add('original_name', 'hidden', array('mapped' => false));
}
}
現在,你可以使用擴展形式那樣:
$form = $this->createForm(new FileEditType(), $document);
並修改字段的那樣值:
$form->get('original_name')->setData($document->name);
我希望這將有助於somenone:○ )
謝謝,這似乎是我需要的解決方案。 – DavidW 2012-02-19 09:24:18