src/JuridicusBundle/Form/Type/KundeKenntnisseType.php line 18

Open in your IDE?
  1. <?php
  2. namespace JF\JuridicusBundle\Form\Type;
  3. use JMS\DiExtraBundle\Annotation\FormType;
  4. use Symfony\Component\Form\AbstractType;
  5. use Symfony\Component\Form\FormBuilderInterface;
  6. use Symfony\Component\Form\FormError;
  7. use Symfony\Component\Form\Event\DataEvent;
  8. use Symfony\Component\Form\FormEvents;
  9. use JF\JuridicusBundle\Form\DataTransformer\KundeKenntnisseToArrayTransformer;
  10. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  11. use Symfony\Component\Form\Extension\Core\Type\TextType;
  12. /**
  13. * @FormType
  14. */
  15. class KundeKenntnisseType extends AbstractType
  16. {
  17. /**
  18. *
  19. * @param \Symfony\Component\Form\FormBuilderInterface $builder
  20. * @param array $options
  21. */
  22. public function buildForm(FormBuilderInterface $builder, array $options)
  23. {
  24. $builder
  25. ->add('kenntnisse', EntityType::class, array(
  26. 'label' => false,
  27. 'required' => false,
  28. 'class' => 'JF\JuridicusBundle\Entity\Kenntnis',
  29. 'multiple' => true,
  30. 'expanded' => true,
  31. 'choice_label' => 'name', // welches Feld angezeigt wird
  32. 'row_attr' => ['class' => 'form-check-inline'], // Bootstrap inline
  33. 'choice_attr' => function($choice, $key, $value) {
  34. return ['class' => 'form-check-input']; // optional CSS für jedes Input
  35. },
  36. ))
  37. ->add('sonstiges', TextType::class, array(
  38. 'required' => false,
  39. ))
  40. ->addModelTransformer(new KundeKenntnisseToArrayTransformer())
  41. ->addEventListener(FormEvents::POST_SUBMIT, function ($event) { //DataEvent $event
  42. $form = $event->getForm();
  43. //$keine_kenntnisse = $form['keine_kenntnisse']->getData();
  44. $kenntnisse = $form['kenntnisse']->getData();
  45. $sonstiges = $form['sonstiges']->getData();
  46. $kenntnis_last = $kenntnisse->last();
  47. //$keine_kenntnisse == false and
  48. if ($kenntnisse->count() == 0) {
  49. $form['kenntnisse']->addError(new FormError('Keine Interessengebiete ausgewählt.'));
  50. }
  51. if (empty($sonstiges) and $kenntnis_last and $kenntnis_last->getName() === 'Sonstiges') {
  52. $form['sonstiges']->addError(new FormError('Die Angabe "Sonstiges" ist leer.'));
  53. }
  54. })
  55. ;
  56. }
  57. /**
  58. * @return string
  59. */
  60. public function getKundeKenntnisseType()
  61. {
  62. return 'kunde_kenntnisse';
  63. }
  64. public function getName()
  65. {
  66. return 'kunde_kenntnisse';
  67. }
  68. }