minor #13111 [FrameworkBundle] Optimize validator registration (dunglas)

This PR was merged into the 2.7 branch.

Discussion
----------

[FrameworkBundle] Optimize validator registration

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| License       | MIT

Optimize validator registration (avoid an unneeded loop and access to the Reflection API).

Commits
-------

9c5b9e1 [FrameworkBundle] Optimize validator registration
This commit is contained in:
Fabien Potencier 2014-12-26 10:33:39 +01:00
commit 2a85c7e19b
1 changed files with 14 additions and 22 deletions

View File

@ -40,6 +40,7 @@ class FrameworkExtension extends Extension
*
* @param array $configs
* @param ContainerBuilder $container
* @throws LogicException
*/
public function load(array $configs, ContainerBuilder $container)
{
@ -711,9 +712,7 @@ class FrameworkExtension extends Extension
$container->setParameter('validator.translation_domain', $config['translation_domain']);
$xmlMappings = $this->getValidatorXmlMappingFiles($container);
$yamlMappings = $this->getValidatorYamlMappingFiles($container);
list($xmlMappings, $yamlMappings) = $this->getValidatorMappingFiles($container);
if (count($xmlMappings) > 0) {
$validatorBuilder->addMethodCall('addXmlMappings', array($xmlMappings));
}
@ -766,35 +765,28 @@ class FrameworkExtension extends Extension
$container->setParameter('validator.api', $api);
}
private function getValidatorXmlMappingFiles(ContainerBuilder $container)
private function getValidatorMappingFiles(ContainerBuilder $container)
{
$files = array();
$files = array(array(), array());
if (interface_exists('Symfony\Component\Form\FormInterface')) {
$reflClass = new \ReflectionClass('Symfony\Component\Form\FormInterface');
$files[] = dirname($reflClass->getFileName()).'/Resources/config/validation.xml';
$container->addResource(new FileResource($files[0]));
$files[0][] = dirname($reflClass->getFileName()).'/Resources/config/validation.xml';
$container->addResource(new FileResource($files[0][0]));
}
foreach ($container->getParameter('kernel.bundles') as $bundle) {
$bundles = $container->getParameter('kernel.bundles');
foreach ($bundles as $bundle) {
$reflection = new \ReflectionClass($bundle);
if (is_file($file = dirname($reflection->getFilename()).'/Resources/config/validation.xml')) {
$files[] = realpath($file);
$dirname = dirname($reflection->getFilename());
if (is_file($file = $dirname.'/Resources/config/validation.xml')) {
$files[0][] = realpath($file);
$container->addResource(new FileResource($file));
}
}
return $files;
}
private function getValidatorYamlMappingFiles(ContainerBuilder $container)
{
$files = array();
foreach ($container->getParameter('kernel.bundles') as $bundle) {
$reflection = new \ReflectionClass($bundle);
if (is_file($file = dirname($reflection->getFilename()).'/Resources/config/validation.yml')) {
$files[] = realpath($file);
if (is_file($file = $dirname.'/Resources/config/validation.yml')) {
$files[1][] = realpath($file);
$container->addResource(new FileResource($file));
}
}