4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\Form\Extension\Validator\EventListener
;
14 use Symfony\Component\EventDispatcher\EventSubscriberInterface
;
15 use Symfony\Component\Form\Extension\Validator\ViolationMapper\ViolationMapperInterface
;
16 use Symfony\Component\Validator\ValidatorInterface
;
17 use Symfony\Component\Form\FormEvents
;
18 use Symfony\Component\Form\FormEvent
;
19 use Symfony\Component\Form\Extension\Validator\Constraints\Form
;
22 * @author Bernhard Schussek <bschussek@gmail.com>
24 class ValidationListener
implements EventSubscriberInterface
28 private $violationMapper;
33 public static function getSubscribedEvents()
35 return array(FormEvents
::POST_SUBMIT
=> 'validateForm');
38 public function __construct(ValidatorInterface
$validator, ViolationMapperInterface
$violationMapper)
40 $this->validator
= $validator;
41 $this->violationMapper
= $violationMapper;
45 * Validates the form and its domain object.
47 * @param FormEvent $event The event object
49 public function validateForm(FormEvent
$event)
51 $form = $event->getForm();
53 if ($form->isRoot()) {
54 // Validate the form in group "Default"
55 $violations = $this->validator
->validate($form);
57 if (count($violations) > 0) {
58 foreach ($violations as $violation) {
59 // Allow the "invalid" constraint to be put onto
60 // non-synchronized forms
61 $allowNonSynchronized = Form
::ERR_INVALID
=== $violation->getCode();
63 $this->violationMapper
->mapViolation($violation, $form, $allowNonSynchronized);