我正在使用Symfony Validation来完成对我的模型(基本的PHP类(的验证。当我尝试执行验证时,我被告知我的 YAML 文件必须包含一个 YAML 数组,
InvalidArgumentException: The file "/Users/me/git/project123/app/Lib//Acme/SiteList/Model/validations.yml" must contain a YAML array.
我的Symfony验证YAML看起来像这样(使用4个空格进行缩进(,
AcmeSiteListModelSiteListItem:
properties:
siteListId:
- NotBlank: ~
AcmeSiteListModelSiteList:
properties:
name:
- NotBlank: ~
解析 YAML 验证文件如下所示,
array(2) {
["AcmeSiteListModelSiteListItem"]=>
array(1) {
["properties"]=>
array(1) {
["siteListId"]=>
array(1) {
[0]=>
array(1) {
["NotBlank"]=>
NULL
}
}
}
}
["AcmeSiteListModelSiteList"]=>
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;
}
没有 YAML 数组这样的东西。YAML 具有序列(节点列表(和映射(键值对集(。在此错误消息中使用术语数组是Symfony作者的一个坏主意,因为PHP中的array
在大多数其他语言中被称为哈希表。
话虽如此,问题在您的路径中出现:
/Users/me/git/project123/app/Lib//Acme/SiteList/Model/validations.yml
^^
这个双斜杠可能会阻止Symfony加载文件。由此产生的错误肯定不是我对这种输入所期望的。
旧,但以防万一,也许您省略(或保留注释(routes.yml 文件的第一行?
#index:
path: /
controller: AppControllerHomeController::index
不起作用并给您此错误。
index:
path: /
controller: AppControllerHomeController::index
是正确的。希望这会有所帮助。