为什么我会收到一个 Symfony Validation yaml 文件的"must contain a YAML array"?



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

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

最新更新