Как разделить файлы yaml валидации в Symfony 2.5?

Этот код работал на Symfony 2.4.5, но он не работает для Symfony 2.5:

Это мой класс расширения HRAPI, который работал в Symfony 2.4.5, но не в Symfony 2.5

<?php namespace HardCoreMore\HRAPIBundle\DependencyInjection; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\Config\FileLocator; use Symfony\Component\HttpKernel\DependencyInjection\Extension; use Symfony\Component\DependencyInjection\Loader; /** * This is the class that loads and manages your bundle configuration * * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html} */ class HRAPIExtension extends Extension { /** * {@inheritDoc} */ public function load(array $configs, ContainerBuilder $container) { $configuration = new Configuration(); $config = $this->processConfiguration($configuration, $configs); $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); $loader->load('services.yml'); // load validation configuration $yamlMappingFiles = $container->getParameter('validator.mapping.loader.yaml_files_loader.mapping_files'); $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/site_user.yml'; $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/human_resource.yml'; $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/tag.yml'; $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/company.yml'; $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/programming_language.yml'; $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/technology.yml'; $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/language.yml'; $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/management.yml'; $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/calendar_entry.yml'; $container->setParameter('validator.mapping.loader.yaml_files_loader.mapping_files', $yamlMappingFiles); } } 

Он отображает ошибку:

ParameterNotFoundException: вы запросили несуществующий параметр «validator.mapping.loader.yaml_files_loader.mapping_files».

Любые идеи, как это сделать для Symfony 2.5?

Symfony 2.5 изменил способ загрузки файлов проверки. Вот как это сделать сейчас (используя компонент Finder для динамической загрузки):

Создайте пропуск компилятора:

 namespace MyBundle\DependencyInjection\Compiler; use Symfony\Component\Finder\Finder; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\Config\Resource\DirectoryResource; class ValidatorPass implements CompilerPassInterface { public function process(ContainerBuilder $container) { $validatorBuilder = $container->getDefinition('validator.builder'); $validatorFiles = array(); $finder = new Finder(); foreach ($finder->files()->in(__DIR__ . '/../../Resources/config/validation') as $file) { $validatorFiles[] = $file->getRealPath(); } $validatorBuilder->addMethodCall('addYamlMappings', array($validatorFiles)); // add resources to the container to refresh cache after updating a file $container->addResource(new DirectoryResource(__DIR__ . '/../../Resources/config/validation')); } } 

Затем добавьте этот компилятор в свой Bundle:

 namespace MyBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; use Symfony\Component\DependencyInjection\ContainerBuilder; use MyBundle\DependencyInjection\Compiler\ValidatorPass; class MyBundle extends Bundle { // . . . . public function build(ContainerBuilder $container) { parent::build($container); $container->addCompilerPass(new ValidatorPass()); } // . . . . } 

Вы должны использовать ValidatorBuilder#addYamlMappings / ValidatorBuilder#addYamlMapping :

 $builderDefinition = $container->getDefinition('validator.builder'); $builderDefinition->addMethodCall('addYamlMappings', array( array( __DIR__.'/../Resources/config/validation/site_user.yml'; __DIR__.'/../Resources/config/validation/human_resource.yml'; __DIR__.'/../Resources/config/validation/tag.yml'; __DIR__.'/../Resources/config/validation/company.yml'; __DIR__.'/../Resources/config/validation/programming_language.yml'; __DIR__.'/../Resources/config/validation/technology.yml'; __DIR__.'/../Resources/config/validation/language.yml'; __DIR__.'/../Resources/config/validation/management.yml'; __DIR__.'/../Resources/config/validation/calendar_entry.yml' ) )); 

Это работает вне коробки с Symfony 2.7.

https://github.com/symfony/symfony/pull/13855