2012-02-22 7 views
16

今、私は、1つのファイル内のすべてのバンドルのエンティティを検証するvalidation.ymlというファイルを持っています。Symfony2では、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 

しかし、私は2つのファイルに分割し、それらの両方をインポートしたいと思います。

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 
+3

あなたはどういう "動作しませんでした" ?例外がスローされたか、何も起こりませんでしたか? – Problematic

+0

フォームは正しく検証されずに提出されました。 – intrepion

答えて

28

は、これらの行を追加します。これは私が試したし、それが動作しませんでしたものです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); 
} 
+0

ありがとう!これはすごくうまくいった!私もそのvalidation.ymlファイルを削除しました – intrepion

+0

@ m2mdasこれはxmlでyamlを置き換えることでxmlで動作しないようです。別のシンセックスがありますか?エラーメッセージが表示されます。[]演算子は文字列ではサポートされていません。 – Mick

+0

@Patt for xml現在のパラメータは 'validator.mapping.loader.xml_files_loader.mapping_files'です。 –

5

あなたはこれが@MaksSlesarenkoの答えにYAMLの代替である、あなたの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> 
+1

+1を参照してください。 @ m2mdasの方がはるかに優れています。なぜなら、構成の単純な変更が必要なだけなのでです。完璧! –

1

に追加することができます。

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%のような)いくつかのバンドルルート変数に%kernel.root_dir%/../src/CompanyName/TestBundle/を変更する方法はありますか?

2

上記のソリューションは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 
3

別の方法:たとえば

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のコンポーネントを使用して、あなたはこのファイルを使用すると、新しいバリデータファイルを追加するたびに触れることを心配する必要はありません。

7

回答はsymfonyの2.7のとおり2015

にて加え、バンドルの Resources/config/validationサブディレクトリに配置XMLとYAMLの制約ファイルがロードされます。 2.7の前には、Resources/config/validation.yml(または.xml)のみがロードされました。 がロードされました。

詳細情報で:

関連する問題