フォームを生成するために異なるタイプを使用している Web を変更する必要があります。Bundle/Form/ フォルダーに 2 つのファイルがあります。
- ProductType.php
- ProductEditType.php
最初のものは新しい製品フォームを生成するために使用され、2 つ目はフォームを編集するために使用されます。
両方のファイルのほぼ 95% が同じであるため、1 つのタイプを使用して複数のフォームを生成するには、何らかの方法で存在する必要があると思います。
フォームイベントを使用してフォームを変更する方法について読んでいますが、それについての一般的な良い習慣が何であるかを明確に見つけていません.
どうもありがとう。
アップデート
次のように Event Subscriber を書きました。
<?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());
それだけです。非常に簡単に記述でき、問題なく動作します。