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