Мне нужна помощь, чтобы понять, как использовать eventListener Symfony. Итак, у меня есть две кнопки «добавить новую книгу для продажи» и «добавить новую книгу для торговли» в моем указателе на рулевое управление в той же форме BookType. Моя проблема: если вы нажмете «добавить новую книгу для продажи» path => добавьте поле цены в форму. Я пробовал this для моего проекта, но он все еще не работает. Также я создаю персональную форму для BookType.Добавить поле в форме с eventListener Symfony
Вот мой код для формы Booktype:
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('titreOuvrage',TextType::class,array('label'=>'Nom de l\'ouvrage','attr'=>array('class'=>'form-control')))
->add('resumeOuvrage',TextareaType::class,array('label'=>'Résumé de l\'ouvrage','attr'=>array('class'=>'form-control')))
->add('auteur', CollectionType::class, array('entry_type'=>AuteursType::class, 'allow_add'=>true, 'allow_delete'=>true))
->add('editeur',EntityType::class,array('label'=>'Sélectionnez l\'éditeur','attr'=>array('class'=>'form-control'),'class'=>'SB\MainBundle\Entity\Editeurs','choice_label'=>'libelle_editeur'))
->add('etat',EntityType::class,array('label'=>'Cochez l\'état dans lequel se trouve votre ouvrage','class'=>'SB\MainBundle\Entity\EtatsOuvrages','choice_label'=>'libelle_etat','expanded'=>true))
->add('categorie',EntityType::class,array('label'=>'Selectionnez une catégorie','attr'=>array('class'=>'form-control'),'class'=>'SB\MainBundle\Entity\Categories','choice_label'=>'libelle_categorie'))
->add('genre',EntityType::class,array('label'=>'Cochez un ou plusieurs genre','class'=>'SB\MainBundle\Entity\Genres','choice_label'=>'libelle_genre','multiple'=>true,'expanded'=>true))
// ->add('photosOuvragePath')
->add('photosOuvrageFile',FileType::class,array('label'=>'Ajouter des photos'))
->add('statutOuvrage',EntityType::class,array('label'=>'Que voulez-vous faire de l\'ouvrage','attr'=>array('class'=>'form-control'),'class'=>'SB\MainBundle\Entity\StatutsOuvrages','choice_label'=>'libelle_statut'));
// doc : http://symfony.com/doc/2.8/form/dynamic_form_modification.html#form-events-underlying-data
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event, Request $request) {
//$prix = $event->getData();
$form = $event->getForm();
$route = $request->attributes->get('sb_main_create_ouvrage_vente');
// on va afficher le champ du prix seulement si on est dans le formulaire de vente
if ($route) {
$form->add('prixOuvrage',
TextType::class,
array('label'=>'Entrez le prix de vente','attr'=>array('class'=>'form-control')));
}
})
;
}
Кроме того, если это не работает, я хотел бы знать, как установить значение по умолчанию в функции контроллера для набора книги = > продайте, если щелкните по ссылке «добавить новую книгу для продажи» и введите book => trade, если щелкните по пути «добавить новую книгу для торговли».
, чтобы иметь дело с форменными событий одна причина, почему я перестал использовать компонент формы. Я уверен, что $ request не будет доступен. – Cerad
Да, $ request недоступен, теперь я это знаю. Спасибо. – Tirkal