2016-09-13 6 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を()の後にコンテナのダンプは、コマンドが成功した例を示します

[...] 
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(); 
     [...] 

...配列が空である:私は制約を一覧表示する場合は、私のフォームコントローラで

[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] => 
    ) 

、。ファイルはロードされているように見えますが、制約は無視されます。

誰でもこのエラーが発生しましたか? symfony 2と3の違いから来ている可能性があります。

答えて

0

[解決済み]検証ファイルが正しいディレクトリにありませんでした。それはAppBundle/Resources/configにあるはずだったし、app/Resouces/configに持っていた。今はうまく動作します。

+0

これは現在、バンドル内に配置する必要がある唯一の設定ファイルなので、悲しいです。かなり矛盾 –

関連する問題