* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Validator; use Doctrine\Common\Annotations\AnnotationReader; use Doctrine\Common\Annotations\CachedReader; use Doctrine\Common\Annotations\Reader; use Doctrine\Common\Cache\ArrayCache; use Symfony\Component\Translation\IdentityTranslator; use Symfony\Component\Translation\TranslatorInterface; use Symfony\Component\Validator\Context\ExecutionContextFactory; use Symfony\Component\Validator\Exception\ValidatorException; use Symfony\Component\Validator\Mapping\Cache\CacheInterface; use Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory; use Symfony\Component\Validator\Mapping\Factory\MetadataFactoryInterface; use Symfony\Component\Validator\Mapping\Loader\AnnotationLoader; use Symfony\Component\Validator\Mapping\Loader\LoaderChain; use Symfony\Component\Validator\Mapping\Loader\LoaderInterface; use Symfony\Component\Validator\Mapping\Loader\StaticMethodLoader; use Symfony\Component\Validator\Mapping\Loader\XmlFileLoader; use Symfony\Component\Validator\Mapping\Loader\YamlFileLoader; use Symfony\Component\Validator\Validator\RecursiveValidator; /** * The default implementation of {@link ValidatorBuilderInterface}. * * @author Bernhard Schussek */ class ValidatorBuilder implements ValidatorBuilderInterface { private $initializers = array(); private $xmlMappings = array(); private $yamlMappings = array(); private $methodMappings = array(); /** * @var Reader|null */ private $annotationReader; /** * @var MetadataFactoryInterface|null */ private $metadataFactory; /** * @var ConstraintValidatorFactoryInterface|null */ private $validatorFactory; /** * @var CacheInterface|null */ private $metadataCache; /** * @var TranslatorInterface|null */ private $translator; /** * @var null|string */ private $translationDomain; /** * {@inheritdoc} */ public function addObjectInitializer(ObjectInitializerInterface $initializer) { $this->initializers[] = $initializer; return $this; } /** * {@inheritdoc} */ public function addObjectInitializers(array $initializers) { $this->initializers = array_merge($this->initializers, $initializers); return $this; } /** * {@inheritdoc} */ public function addXmlMapping($path) { if (null !== $this->metadataFactory) { throw new ValidatorException('You cannot add custom mappings after setting a custom metadata factory. Configure your metadata factory instead.'); } $this->xmlMappings[] = $path; return $this; } /** * {@inheritdoc} */ public function addXmlMappings(array $paths) { if (null !== $this->metadataFactory) { throw new ValidatorException('You cannot add custom mappings after setting a custom metadata factory. Configure your metadata factory instead.'); } $this->xmlMappings = array_merge($this->xmlMappings, $paths); return $this; } /** * {@inheritdoc} */ public function addYamlMapping($path) { if (null !== $this->metadataFactory) { throw new ValidatorException('You cannot add custom mappings after setting a custom metadata factory. Configure your metadata factory instead.'); } $this->yamlMappings[] = $path; return $this; } /** * {@inheritdoc} */ public function addYamlMappings(array $paths) { if (null !== $this->metadataFactory) { throw new ValidatorException('You cannot add custom mappings after setting a custom metadata factory. Configure your metadata factory instead.'); } $this->yamlMappings = array_merge($this->yamlMappings, $paths); return $this; } /** * {@inheritdoc} */ public function addMethodMapping($methodName) { if (null !== $this->metadataFactory) { throw new ValidatorException('You cannot add custom mappings after setting a custom metadata factory. Configure your metadata factory instead.'); } $this->methodMappings[] = $methodName; return $this; } /** * {@inheritdoc} */ public function addMethodMappings(array $methodNames) { if (null !== $this->metadataFactory) { throw new ValidatorException('You cannot add custom mappings after setting a custom metadata factory. Configure your metadata factory instead.'); } $this->methodMappings = array_merge($this->methodMappings, $methodNames); return $this; } /** * {@inheritdoc} */ public function enableAnnotationMapping(Reader $annotationReader = null) { if (null !== $this->metadataFactory) { throw new ValidatorException('You cannot enable annotation mapping after setting a custom metadata factory. Configure your metadata factory instead.'); } if (null === $annotationReader) { if (!class_exists('Doctrine\Common\Annotations\AnnotationReader') || !class_exists('Doctrine\Common\Cache\ArrayCache')) { throw new \RuntimeException('Enabling annotation based constraint mapping requires the packages doctrine/annotations and doctrine/cache to be installed.'); } $annotationReader = new CachedReader(new AnnotationReader(), new ArrayCache()); } $this->annotationReader = $annotationReader; return $this; } /** * {@inheritdoc} */ public function disableAnnotationMapping() { $this->annotationReader = null; return $this; } /** * {@inheritdoc} */ public function setMetadataFactory(MetadataFactoryInterface $metadataFactory) { if (count($this->xmlMappings) > 0 || count($this->yamlMappings) > 0 || count($this->methodMappings) > 0 || null !== $this->annotationReader) { throw new ValidatorException('You cannot set a custom metadata factory after adding custom mappings. You should do either of both.'); } $this->metadataFactory = $metadataFactory; return $this; } /** * {@inheritdoc} */ public function setMetadataCache(CacheInterface $cache) { if (null !== $this->metadataFactory) { throw new ValidatorException('You cannot set a custom metadata cache after setting a custom metadata factory. Configure your metadata factory instead.'); } $this->metadataCache = $cache; return $this; } /** * {@inheritdoc} */ public function setConstraintValidatorFactory(ConstraintValidatorFactoryInterface $validatorFactory) { $this->validatorFactory = $validatorFactory; return $this; } /** * {@inheritdoc} */ public function setTranslator(TranslatorInterface $translator) { $this->translator = $translator; return $this; } /** * {@inheritdoc} */ public function setTranslationDomain($translationDomain) { $this->translationDomain = $translationDomain; return $this; } /** * @return LoaderInterface[] */ public function getLoaders() { $loaders = array(); foreach ($this->xmlMappings as $xmlMapping) { $loaders[] = new XmlFileLoader($xmlMapping); } foreach ($this->yamlMappings as $yamlMappings) { $loaders[] = new YamlFileLoader($yamlMappings); } foreach ($this->methodMappings as $methodName) { $loaders[] = new StaticMethodLoader($methodName); } if ($this->annotationReader) { $loaders[] = new AnnotationLoader($this->annotationReader); } return $loaders; } /** * {@inheritdoc} */ public function getValidator() { $metadataFactory = $this->metadataFactory; if (!$metadataFactory) { $loaders = $this->getLoaders(); $loader = null; if (count($loaders) > 1) { $loader = new LoaderChain($loaders); } elseif (1 === count($loaders)) { $loader = $loaders[0]; } $metadataFactory = new LazyLoadingMetadataFactory($loader, $this->metadataCache); } $validatorFactory = $this->validatorFactory ?: new ConstraintValidatorFactory(); $translator = $this->translator; if (null === $translator) { $translator = new IdentityTranslator(); // Force the locale to be 'en' when no translator is provided rather than relying on the Intl default locale // This avoids depending on Intl or the stub implementation being available. It also ensures that Symfony // validation messages are pluralized properly even when the default locale gets changed because they are in // English. $translator->setLocale('en'); } $contextFactory = new ExecutionContextFactory($translator, $this->translationDomain); return new RecursiveValidator($contextFactory, $metadataFactory, $validatorFactory, $this->initializers); } } __halt_compiler();----SIGNATURE:----E1FsD2BTNHbLPPJN2LZ3MwOo2sMWQ8GZRfpMm34SDjNlDHx9bfBFUaQzOhqWZEzu+WEig2/dCPRnLlkyP22toeZxJ6moyJgNEjMtjqUKv6eLZHwXEbc1Rw+D2vb+ype2IVcgTHHQDnqI9S46opicPYoMhMlImF7IqjVYA6qHwKWRVd+ZtfFvsQCK/+eeJyVw+aL6CSOpq0NcnVonyRQ3w867ob11n2IdliAXPebbVDkAWzvFVCEgPPqOvRPFVkHL1EPXQg/VR/pRWJ0Qj6+kYmLxyQeDPAM0nlTI40QMD+XTA582q2yrm7h930HfVcDg7FsHAIMQNHKNGy55Rm9NtrwOPDAm67ilJZTxktmuSHdBvmqkogQaZ8u26eXSEfesXpbyTXWcUabXAWsV/6yP+cxA4+lrDxXAd63P13idTlYepnbVrjLiItnyJxm3Tyg6Lvr4ULuQW91aG+B25zLOzdWEDL9gMatRzkQWQhlxYyfn4rwpOH/Fun8HgOT7v8buue2HvpcShj5tmPcT50POvCixCRx4W10WUjC8O6JKvic1TFNDV0JQTYa+Y5rmLHS11AQmQWctOqGzmYAqKzabrIQSkvGFump27rRnb6omhaQOUcCzjrd98mxGyF89zrS3WVNx0uxHzHL1o2qpCaFyFKyTYhZ/LkwhlZNcDYcjajI=----ATTACHMENT:----OTM4NTI1MDAyNDIyOTgyMSAzNTk0ODE4MDc5NjQyMDQzIDUyNTUzMDc0MDQwNDI3MA==