我必须更改使用不同类型生成表单的网络。Bundle/Form/ 文件夹中有 2 个文件:
- 产品类型.php
- ProductEditType.php
它工作正常,第一个用于生成新产品表单,第二个用于编辑它。
几乎 95% 的两个文件是相同的,所以我想它必须以任何方式使用一种类型来生成多个表单。
我一直在阅读有关如何使用表单事件修改表单的信息,但我还没有清楚地找到关于它的一般良好做法。
非常感谢。
更新
我写了一个事件订阅者如下。
<?php
namespace Project\MyBundle\Form\EventListener;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Description of ProductTypeOptionsSubscriber
*
* @author Javi
*/
class ProductTypeOptionsSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents() {
return array(FormEvents::PRE_SET_DATA => 'preSetData');
}
public function preSetData(FormEvent $event){
$data = $event->getData();
$form = $event->getForm();
if( !$data || !$data->getId() ){
// No ID, it's a new product
//.... some code for other options .....
$form->add('submit','submit',
array(
'label' => 'New Produtc',
'attr' => array('class' => 'btn btn-primary')
));
}else{
// ID exists, generating edit options .....
$form->add('submit','submit',
array(
'label' => 'Update Product',
'attr' => array('class' => 'btn btn-primary')
));
}
}
}
在 ProductType 中,在 buildForm 中:
$builder->addEventSubscriber(new ProductTypeOptionsSubscriber());
就是这样,它很容易编写并且运行良好。