2017-06-20 3 views
0

私はSymfony Validationを使用して自分のモデル(基本的なPHPクラス)の検証を行っています。私は検証を実行しようとすると、私は私のYAMLファイルはYAMLの配列を含まなければならないことを聞いている、Symfony検証yamlファイルの "YAML配列を含んでいる必要があります"が表示されるのはなぜですか?

InvalidArgumentException: The file "/Users/me/git/project123/app/Lib//Acme/SiteList/Model/validations.yml" must contain a YAML array.

マイsymfonyの検証YAMLは(インデントのための4つのスペースを使用して)次のようになり、

Acme\SiteList\Model\SiteListItem: 
    properties: 
     siteListId: 
      - NotBlank: ~ 

Acme\SiteList\Model\SiteList: 
    properties: 
     name: 
      - NotBlank: ~ 

解析YAMLバリデーションファイルは次のようになり、

array(2) { 
    ["Acme\SiteList\Model\SiteListItem"]=> 
    array(1) { 
    ["properties"]=> 
    array(1) { 
     ["siteListId"]=> 
     array(1) { 
     [0]=> 
     array(1) { 
      ["NotBlank"]=> 
      NULL 
     } 
     } 
    } 
    } 
    ["Acme\SiteList\Model\SiteList"]=> 
    array(1) { 
    ["properties"]=> 
    array(1) { 
     ["name"]=> 
     array(1) { 
     [0]=> 
     array(1) { 
      ["NotBlank"]=> 
      NULL 
     } 
     } 
    } 
    } 
} 

私は、

0この経由して検証を実行しています
public function validate(SiteListItem $model) 
{ 
    $validationsPath = APPLIBS . DS . 'Acme/SiteList/Model/validations.yml'; 

    $parsed = Yaml::parse(file_get_contents($validationsPath)); 
    var_dump($parsed); 

    $validator = Validation::createValidatorBuilder() 
     ->addYamlMapping($validationsPath) 
     ->getValidator(); 

    /** @var ConstraintViolationList $violations */ 
    $violations = $validator->validate($model); 

    return $violations; 
} 
+0

私はここに何か他のことが起こっていると思います。私はあなたのvalidations.ymlファイルをコピー/ペーストしました。検証ファイルに追加された未送信の行がある可能性がありますか?エラーメッセージはYamlFileLoader :: parseFile()から来ています。デバッグステートメントをそこに貼り付けることから始めることができます。 – Cerad

答えて

0

YAMLアレイのようなものはありません。 YAMLはのシーケンス(ノードのリスト)とのマッピング(キーと値のペアのセット)を持っています。 PHPのarrayが他のほとんどの言語でハッシュテーブルと呼ばれているため、の配列をこのエラーメッセージに使用することは悪い考えです。言われていること

、問題はあなたのパスにrecides:

/Users/me/git/project123/app/Lib//Acme/SiteList/Model/validations.yml 
           ^^ 

この二重スラッシュは、おそらくファイルをロードからsymfonyのを防ぐことができます。結果として生じるエラーは、確かに私がこの種の入力に期待するものではありません。

+1

ローダーはファイルを見つけることができません "ファイルが存在しません"を取得します。二重スラッシュは問題ではありません。 – Cerad

関連する問題