Мне нужно изменить веб-интерфейс, который использует разные типы для создания форм. Существует в Bundle/Форма/папке 2 файла:Передовая практика с использованием форм
- ProductType.php
- ProductEditType.php
Это работает отлично, первый один используется для создания новой формы продукта, а второй одну форму для ее редактирования.
Почти 95% обоих файлов одинаковы, поэтому я предполагаю, что он должен существовать любым способом использования одного типа для создания более одной формы.
Я читал о том, как изменять формы, используя события формы, но я не нашел четкого представления об общей хорошей практике.
Большое спасибо.
Update
Я написал Абонент события следующим образом.
<?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());
Так что все, что было очень легко писать, и это работает отлично.
Спасибо, я посмотрю. – Javi