2017-06-20 41 views
0

我正在使用Symfony驗證來完成對我的模型(基本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 
     } 
     } 
    } 
    } 
} 

我通過這個執行驗證,

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有序列(節點列表)和映射(一組鍵值對)。在這個錯誤消息中使用術語數組是Symfony作者的一個壞主意,因爲PHP中的array是大多數其他語言中稱爲哈希表的。

話雖這麼說,這個問題recides在您的路徑:

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

這雙斜線可能阻止Symfony的加載文件。由此產生的錯誤當然不是我期望的這種輸入。

+1

你會得到一個「文件不存在」,是加載程序找不到該文件。雙斜槓不是問題。 – Cerad