1

我正在使用 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;
}
4

2 回答 2

0

没有YAML 数组这样的东西。YAML 具有序列(节点列表)和映射(键值对集)。在这个错误消息中使用术语数组对于 Symfony 作者来说是个坏主意,因为arrayPHP 中的 an 在大多数其他语言中被称为哈希表。

话虽如此,问题出在您的道路上:

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

这个双斜杠可能会阻止 Symfony 加载文件。由此产生的错误肯定不是我对这种输入的期望。

于 2017-06-21T11:53:02.607 回答
0

有点旧,但以防万一,也许你省略(或保持评论)你的 routes.yml 文件的第一行?

#index:
    path: /
    controller: App\Controller\HomeController::index

不起作用并给你这个错误。

index:
    path: /
    controller: App\Controller\HomeController::index

是正确的。希望这会有所帮助。

于 2020-01-11T18:55:10.047 回答