1<?php
2
3/*
4 * This file is part of the Silex framework.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Silex\Provider;
13
14use Pimple\Container;
15use Pimple\ServiceProviderInterface;
16use Silex\Provider\Validator\ConstraintValidatorFactory;
17use Symfony\Component\Validator\Validator;
18use Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory;
19use Symfony\Component\Validator\Mapping\Loader\StaticMethodLoader;
20use Symfony\Component\Validator\Validation;
21
22/**
23 * Symfony Validator component Provider.
24 *
25 * @author Fabien Potencier <fabien@symfony.com>
26 */
27class ValidatorServiceProvider implements ServiceProviderInterface
28{
29    public function register(Container $app)
30    {
31        $app['validator'] = function ($app) {
32            return $app['validator.builder']->getValidator();
33        };
34
35        $app['validator.builder'] = function ($app) {
36            $builder = Validation::createValidatorBuilder();
37            $builder->setConstraintValidatorFactory($app['validator.validator_factory']);
38            $builder->setTranslationDomain('validators');
39            $builder->addObjectInitializers($app['validator.object_initializers']);
40            $builder->setMetadataFactory($app['validator.mapping.class_metadata_factory']);
41            if (isset($app['translator'])) {
42                $builder->setTranslator($app['translator']);
43            }
44
45            return $builder;
46        };
47
48        $app['validator.mapping.class_metadata_factory'] = function ($app) {
49            return new LazyLoadingMetadataFactory(new StaticMethodLoader());
50        };
51
52        $app['validator.validator_factory'] = function () use ($app) {
53            return new ConstraintValidatorFactory($app, $app['validator.validator_service_ids']);
54        };
55
56        $app['validator.object_initializers'] = function ($app) {
57            return array();
58        };
59
60        $app['validator.validator_service_ids'] = array();
61    }
62}
63