2016-09-13 134 views
2

我是symfony的新手,我目前正在尝试理解Symfony3。 虽然通过注释验证工作正常,但我无法通过validation.yml文件激活验证。validation.yml文件被忽略

在我的应用程序/配置/ config.yml,我改变了这一行:

framework: 
    validation:  { enabled: true, enable_annotations: false } 

我的src /的appbundle /资源/配置/ validation.yml是:

# src/AppBundle/Resources/config/validation.yml 
AppBundle\Entity\TaskSetClass: 
    properties: 
     taskName: 
      - NotBlank: ~ 
     dueDate: 
      - NotBlank: ~ 
      - Type: \DateTime 

我加了一个扩展文件:

<?php 
// src/AppBundle/DependencyInjection/AppExtension.php 
namespace AppBundle\DependencyInjection; 
use Symfony\Component\HttpKernel\DependencyInjection\Extension; 
use Symfony\Component\DependencyInjection\ContainerBuilder; 
use Symfony\Component\DependencyInjection\Loader; 
use Symfony\Component\Config\FileLocator; 
use Symfony\Component\Finder\Finder; 
/* */ 
class AppExtension extends Extension 
    { 
    public function load(array $configs, ContainerBuilder $container) 
     { 
     $container=new ContainerBuilder(); 
     // Services 
     $loader=new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../../../app/config')); 
     $loader->load('services.yml'); 
     // Validation 
     // Commented : No "validator.mapping.loader.yaml_files_loader.mapping_files" parameter. 
     //$yamlMappingFiles=$container->getParameter('validator.mapping.loader.yaml_files_loader.mapping_files'); 
     $finder=new Finder(); 
     foreach($finder->files()->in(__DIR__.'/../../../app/Resources/config') as $file) 
      { 
      $filePath=$file->getRealPath(); 
      if(preg_match('@\[email protected]',$filePath)===1) 
       { 
       $yamlMappingFiles[]=$filePath; 
       } 
      } 
     $container->setParameter('validator.mapping.loader.yaml_files_loader.mapping_files', $yamlMappingFiles); 
     } 
    } 

在appExtension.php所述的setParameter()之后的容器的倾倒表示命令已成功执行:

[parameterBag:protected] => Symfony\Component\DependencyInjection\ParameterBag\ParameterBag Object 
    (
    [parameters:protected] => Array 
     (
     [validator.mapping.loader.yaml_files_loader.mapping_files] => Array 
      (
      [0] => /mnt/400Go/www/sy1/app/Resources/config/validation.yml 
      ) 
     ) 
    [resolved:protected] => 
    ) 

在我的表单控制器,如果我列出的约束:

[...] 
if($form->isSubmitted()) 
    { 
    if($form->isValid()) 
     { 
     $metadata=$this->container 
       ->get('validator') 
       ->getMetadataFor('AppBundle\Entity\TaskSetClass'); 
     $propertiesMetadata=$metadata->properties; 
     $constraints=array(); 
     foreach ($propertiesMetadata as $propertyMetadata) 
      { 
      $constraints[$propertyMetadata->name]=$property->constraints; 
      } 
     echo'<pre>Constraints : '; 
     print_r($constraints); 
     echo'</pre>'; 
     die(); 
     [...] 

...数组为空。所以文件似乎被加载,但约束被忽略。

有没有人遇到此错误?它可能来自symfony 2和3之间的差异。

回答

0

[已解决]验证文件不在正确的目录中。它应该是在AppBundle/Resources/config中,并且已经将它放到了应用程序/ Resouces/config中。现在工作正常。

+0

这很让人伤心,因为这是目前唯一需要放在捆绑包中的配置文件。几乎不一致 –