【发布时间】:2017-06-20 21:55:24
【问题描述】:
我正在使用 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 个空格进行缩进),
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;
}
【问题讨论】:
-
我认为您这里还有其他事情要做。我复制/粘贴了您的 validations.yml 文件,一切似乎都运行良好。我怀疑您的验证文件中可能还有其他未发布的行?错误消息来自 YamlFileLoader::parseFile() 我想你可以从那里粘贴一个调试语句开始。
-
我认为问题出在 YamlLoader 中。其中哪一个在这里使用?我最近遇到了一个问题,我在路由下使用了一个,而不是在翻译组件下使用了一个。希望对您有所帮助。
标签: php symfony validation yaml symfony-validator