В Symfony2 можно ли разделить файл validation.yml на несколько файлов с помощью импорта? - PullRequest
18 голосов
/ 23 февраля 2012

Прямо сейчас у меня есть файл 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

Ответы [ 8 ]

28 голосов
/ 23 февраля 2012

Добавьте эти строки в 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);
}
7 голосов
/ 31 декабря 2015

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

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

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

6 голосов
/ 10 июня 2014

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

5 голосов
/ 17 декабря 2012

Вы можете добавить в свои 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>
3 голосов
/ 21 августа 2013

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

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

2 голосов
/ 29 июля 2013

Решения выше не работают в 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
1 голос
/ 02 июля 2019

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


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

1 голос
/ 26 мая 2013

Это альтернатива 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%)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...