Прямо сейчас у меня есть файл с именем 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
Начиная с Symfony
2.7
загружаются файлы ограничений XML и Yaml, расположенные в подкаталогеResources/config/validation
пакета.
До2.7
загружались толькоResources/config/validation.yml
(или .xml).
Дополнительная информация:
Вы можете добавить в свои 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%
)?