2012-02-22 16 views
16

Ngay bây giờ, tôi có một tệp được gọi là validation.yml với xác thực của tất cả các thực thể của nhóm trong một tệp.Trong Symfony2, tệp validation.yml có thể được chia thành nhiều tệp bằng cách sử dụng nhập không?

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 

Nhưng tôi muốn chia nó thành hai tập tin và nhập chúng cả. Đây là những gì tôi đã cố gắng và nó đã không làm việc:

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

Ý anh là gì "không làm việc" ? Là một ngoại lệ ném, hoặc không có gì xảy ra? – Problematic

+0

Biểu mẫu được gửi mà không xác thực chính xác, không nên xảy ra. – intrepion

Trả lời

28

Thêm các dòng trong load phương thức 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

Cảm ơn rất nhiều! Điều này làm việc tuyệt vời! Tôi thậm chí đã xóa tập tin validation.yml – intrepion

+0

@ m2mdas Điều này dường như không hoạt động trong xml bằng cách thay thế yaml bằng xml. Có một synthax khác? Tôi nhận được thông báo lỗi: toán tử [] không được hỗ trợ cho chuỗi .. – Mick

+0

@Patt cho xml tham số hiện tại sẽ là 'validator.mapping.loader.xml_files_loader.mapping_files'. –

5

Bạn có thể thêm vào services.xml bạn

<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. Tốt hơn nhiều thì câu trả lời @ m2mdas, bởi vì nó chỉ đòi hỏi một sự thay đổi đơn giản trong cấu hình. Hoàn hảo! –

1

Đây là YAML thay thế cho @MaksSlesarenko câu trả lời.

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

BTW là có cách nào để thay đổi %kernel.root_dir%/../src/CompanyName/TestBundle/ một số bó gốc biến (như %kernel.root_dir%)?

2

Các giải pháp ở trên không hoạt động trong Symfony 2.3.

Trong 2.3, việc tải nhiều tệp YML từ bộ nạp sẽ dễ dàng hơn. Ví dụ:

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

Một thay thế:

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); 
} 

Bằng cách này, bằng cách sử dụng phần Finder, bạn không phải lo lắng về chạm vào tập tin này mỗi khi bạn thêm một file validator mới.

7

trả lời thêm tại 2015

Tính đến Symfony 2.7, XML và YAML hạn chế các file nằm trong Resources/config/validation thư mục con của một bó được nạp.
Trước 2.7, chỉ Resources/config/validation.yml (hoặc .xml) mới được tải.

Thông tin thêm tại địa chỉ:

Các vấn đề liên quan