В Symfony2 можно ли файл validation.yml разбивать на несколько файлов с помощью импорта?

Прямо сейчас у меня есть файл с именем validation.yml с проверкой всех сущностей пакета в одном файле.

validation.yml

Blogger\BlogBundle\Entity\Comment properties: username: - NotBlank: message: You must enter your name - MaxLength: 50 comment: - NotBlank: message: You must enter a comment - MinLength: 50 Blogger\BlogBundle\Entity\Enquiry: properties: name: - NotBlank: ~ email: - Email: message: symblog does not like invalid emails. Give me a real one! subject: - NotBlank: ~ - MaxLength: 50 body: - MinLength: 50 

Но я хотел бы разделить его на два файла и импортировать их оба. Это то, что я пробовал, и это не сработало:

validation.yml

 imports: - { resource: comment.yml } - { resource: enquiry.yml } 

comment.yml

 Blogger\BlogBundle\Entity\Comment properties: username: - NotBlank: message: You must enter your name - MaxLength: 50 comment: - NotBlank: message: You must enter a comment - MinLength: 50 

enquiry.yml

 Blogger\BlogBundle\Entity\Enquiry: properties: name: - NotBlank: ~ email: - Email: message: symblog does not like invalid emails. Give me a real one! subject: - NotBlank: ~ - MaxLength: 50 body: - MinLength: 50 

Добавьте эти строки в метод load src/Blogger/BlogBundle/DependencyInjection/BloggerBlogExtension.php .

 public function load(array $configs, ContainerBuilder $container) { //... $yamlMappingFiles = $container->getParameter('validator.mapping.loader.yaml_files_loader.mapping_files'); $yamlMappingFiles[] = __DIR__.'/../Resources/config/comment.yml'; $yamlMappingFiles[] = __DIR__.'/../Resources/config/enquiry.yml'; $container->setParameter('validator.mapping.loader.yaml_files_loader.mapping_files', $yamlMappingFiles); } 

Symfony 2.5 нарушил вышеуказанные решения. См. https://stackoverflow.com/a/24210501/175753

Ответ добавлен в 2015 году

Начиная с Symfony 2.7 загружаются файлы ограничений XML и Yaml, расположенные в подкаталоге Resources/config/validation пакета.
До 2.7 загружались только Resources/config/validation.yml (или .xml).

Дополнительная информация:

  • Github PR: [FrameworkBundle] "сопоставления" для проверки # 13878
  • Symfony doc: Основы валидации

Вы можете добавить в свои services.xml

 <parameters> <parameter key="validator.mapping.loader.yaml_files_loader.mapping_files" type="collection"> <parameter>Blogger\BlogBundle\Resources\config\comment.yml</parameter> <parameter>Blogger\BlogBundle\Resources\config\enquiry.yml</parameter> </parameter> </parameters> 

Другая альтернатива:

 public function load(array $configs, ContainerBuilder $container) { $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); $validatorFiles = $container->getParameter('validator.mapping.loader.yaml_files_loader.mapping_files'); $finder = new Finder(); foreach ($finder->files()->in(__DIR__ . '/../Resources/config/validation') as $file) { $validatorFiles[] = $file->getRealPath(); } $container->setParameter('validator.mapping.loader.yaml_files_loader.mapping_files', $validatorFiles); } 

Таким образом, используя компонент Finder, вам не нужно беспокоиться о касании этого файла каждый раз, когда вы добавляете новый файл проверки.

Решения, приведенные выше, не работают в Symfony 2.3.

В 2.3 легче загрузить несколько файлов Yml из загрузчика. Например:

  $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); $loader->load('services.yml'); $loader->load('services/menu.yml'); //new file to load 

Это альтернатива YAML @MaksSlesarenko.

 parameters: validator.mapping.loader.yaml_files_loader.mapping_files: - "%kernel.root_dir%/../src/CompanyName/TestBundle/Resources/config/validation/Entity.DbObject.yml" 

BTW есть ли способ изменить %kernel.root_dir%/../src/CompanyName/TestBundle/ на некоторую корневую переменную %kernel.root_dir% (например, %kernel.root_dir% )?