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

В 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
4b9b3361

Ответ 1

Добавьте эти строки в 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);
}

Ответ 2

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

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

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

Ответ 4

Вы можете добавить в свои 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>

Ответ 5

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

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, вам не нужно беспокоиться о касании этого файла каждый раз, когда вы добавляете новый файл проверки.

Ответ 6

Решения, приведенные выше, не работают в 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

Ответ 7

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

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

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

Ответ 8

Начиная с Symfony 3.3 все файлы, присутствующие в YourBundle/Resources/config/validation/*, зарегистрированы.


Начиная с Symfony 3.4 все файлы, присутствующие в %kernel.project_dir%/config/validator/*, также зарегистрированы.