跳至主要内容

创建问题表单时的常见验证错误

在创建、保存或查看问题表单时,您可能会看到一些常见的验证错误。

注意:问题表单目前处于测试阶段,可能会发生变化。

缺少必需的顶级键name

模板不包含name字段,这意味着在向用户提供选项列表时,不清楚如何命名您的问题模板。

“缺少必需的顶级键name”错误示例

description: "Thank you for reporting a bug!"
...

可以通过添加name作为键来修复此错误。

name: "Bug report"
description: "Thank you for reporting a bug!"
...

key必须是字符串

此错误消息表示已提供允许的键,但其值无法解析为数据类型不受支持。

key必须是字符串”错误示例

下面的description正在解析为布尔值,但它应该是字符串。

name: "Bug report"
description: true
...

可以通过提供字符串作为值来修复此错误。字符串可能需要用双引号括起来才能成功解析。例如,包含'的字符串必须用双引号括起来。

name: "Bug report"
description: "true"
...

当字段需要字符串时,空字符串或仅包含空格的字符串也不允许。

name: ""
description: "File a bug report"
assignees: "      "
...

可以通过将值更正为非空字符串来修复此错误。如果该字段不是必需的,则应删除键值对。

name: "Bug Report"
description: "File a bug report"
...

input 不是允许的键

在模板的顶层提供了意外的键。有关支持哪些顶层键的更多信息,请参阅“问题表单语法”。

input 不是允许的键”错误示例

name: "Bug report"
hello: world
...

可以通过删除意外的键来修复此错误。

name: "Bug report"
...

禁止的键

YAML 将某些字符串解析为 Boolean 值。为了避免这种情况,我们明确禁止使用以下键

yYyesYesYESnNnoNoNOtrueTrueTRUEfalseFalseFALSEonOnONoffOffOFF

可以通过删除禁止的键来修复此错误。

正文必须包含至少一个非 Markdown 字段

问题表单必须接受用户输入,这意味着其至少一个字段必须包含用户输入字段。markdown 元素是静态文本,因此 body 数组不能仅包含 markdown 元素。

“正文必须包含至少一个非 Markdown 字段”错误示例

name: "Bug report"
body:
- type: markdown
  attributes:
    value: "Bugs are the worst!"

可以通过添加接受用户输入的非 Markdown 元素来修复此错误。

name: "Bug report"
body:
- type: markdown
  attributes:
    value: "Bugs are the worst!"
- type: textarea
  attributes:
    label: "What's wrong?"

正文必须具有唯一的 ID

如果使用 id 属性来区分多个元素,则每个 id 属性必须是唯一的。

“正文必须具有唯一的 ID”错误示例

name: "Bug report"
body:
- type: input
  id: name
  attributes:
    label: First name
- type: input
  id: name
  attributes:
    label: Last name

可以通过更改其中一个输入的 id 来修复此错误,以确保每个 input 字段都具有唯一的 id 属性。

name: "Bug report"
body:
- type: input
  id: name
  attributes:
    label: First name
- type: input
  id: surname
  attributes:
    label: Last name

正文必须具有唯一的标签

当存在多个接受用户输入的 body 元素时,每个用户输入字段的 label 属性必须是唯一的。

“正文必须具有唯一的标签”错误示例

name: "Bug report"
body:
- type: textarea
  attributes:
    label: Name
- type: textarea
  attributes:
    label: Name

可以通过更改其中一个输入字段的 label 属性来修复此错误,以确保每个 label 都是唯一的。

name: "Bug report"
body:
- type: textarea
  attributes:
    label: Name
- type: textarea
  attributes:
    label: Operating System

输入字段也可以通过其 id 属性来区分。如果需要重复的 label 属性,则可以提供至少一个 id 来区分具有相同标签的两个元素。

name: "Bug report"
body:
- type: textarea
  id: name_1
  attributes:
    label: Name
- type: textarea
  id: name_2
  attributes:
    label: Name

id 属性在问题正文中不可见。如果要区分结果问题中的字段,则应使用不同的 label 属性。

标签过于相似

相似的标签可能会被处理成相同的引用。如果input没有提供id属性,则使用label属性生成对input字段的引用。为此,我们通过利用 Rails 的 parameterize 方法来处理label。在某些情况下,两个不同的标签可能会被处理成相同的参数化字符串。

"标签过于相似" 错误示例

name: "Bug report"
body:
- type: input
  attributes:
    label: Name?
- type: input
  id: name
  attributes:
    label: Name???????

可以通过在冲突标签中添加至少一个区分的字母数字字符、-_ 来修复此错误。

name: "Bug report"
body:
- type: input
  attributes:
    label: Name?
- type: input
  attributes:
    label: Your name

也可以通过为冲突标签之一提供唯一的id来修复此错误。

name: "Bug report"
body:
- type: input
  attributes:
    label: Name?
- type: input
  id: your-name
  attributes:
    label: Name???????

复选框必须具有唯一的标签

当存在checkboxes元素时,其嵌套标签在其同级元素中必须是唯一的,并且在其他输入类型中也必须是唯一的。

"复选框必须具有唯一的标签" 错误示例

name: "Bug report"
body:
- type: textarea
  attributes:
    label: Name
- type: checkboxes
  attributes:
    options:
    - label: Name

可以通过更改这些输入之一的label属性来修复此错误。

name: "Bug report"
body:
- type: textarea
  attributes:
    label: Name
- type: checkboxes
  attributes:
    options:
    - label: Your name

或者,您可以为任何冲突的顶级元素提供id。嵌套的复选框元素不支持id属性。

name: "Bug report"
body:
- type: textarea
  id: name_1
  attributes:
    label: Name
- type: checkboxes
  attributes:
    options:
    - label: Name

id 属性在问题正文中不可见。如果要区分结果问题中的字段,则应使用不同的 label 属性。

Body[i]: 缺少必需的键类型

每个主体块都必须包含键type

body 的错误将以body[i]为前缀,其中i表示包含错误的主体块的零索引索引。例如,body[0] 告诉我们错误是由body 列表中的第一个块引起的。

"body[i]: 缺少必需的键类型" 错误示例

body:
- attributes:
    value: "Thanks for taking the time to fill out this bug! If you need real-time help, join us on Discord."

可以通过添加键type 并将有效的输入类型作为值来修复此错误。有关可用的body 输入类型及其语法的详细信息,请参见 "GitHub 表单架构的语法。"。

body:
- type: markdown
  attributes:
    value: "Thanks for taking the time to fill out this bug! If you need real-time help, join us on Discord."

Body[i]: x 不是有效的输入类型

主体块之一包含一个类型值,该值不是 允许的类型 之一。

body 的错误将以body[i]为前缀,其中i表示包含错误的主体块的索引。例如,body[0] 告诉我们错误是由body 列表中的第一个块引起的。

示例:"body[i]: x 不是有效的输入类型" 错误

body:
- type: x
  attributes:
    value: "Thanks for taking the time to fill out this bug! If you need real-time help, join us on Discord."

可以通过将 x 更改为有效的类型之一来修复错误。

body:
- type: markdown
  attributes:
    value: "Thanks for taking the time to fill out this bug! If you need real-time help, join us on Discord."

Body[i]: 缺少必需的属性键 value

缺少一个必需的 value 属性。当块没有 attributes 键或在 attributes 键下没有 value 键时,就会发生此错误。

body 的错误将以body[i]为前缀,其中i表示包含错误的主体块的索引。例如,body[0] 告诉我们错误是由body 列表中的第一个块引起的。

示例:"body[i]: 缺少必需的属性键 value" 错误

body:
- type: markdown
  attributes:
    value: "Thanks for taking the time to fill out this bug! If you need real-time help, join us on Discord."
- type: markdown

此示例中的错误可以通过在 body 的第二个列表元素中将 value 添加为 attributes 下的键来修复。

body:
- type: markdown
  attributes:
    value: "Thanks for taking the time to fill out this bug! If you need real-time help, join us on Discord."
- type: markdown
  attributes:
    value: "This is working now!"

Body[i]: 标签必须是字符串

attributes 块中,值的数据类型错误。

body 的错误将以body[i]为前缀,其中i表示包含错误的主体块的索引。例如,body[0] 告诉我们错误是由body 列表中的第一个块引起的。

示例:"body[i]: 标签必须是字符串" 错误

下面的 label 被解析为布尔值,但它应该是字符串。

body:
- type: markdown
  attributes:
    value: "Thanks for taking the time to fill out this bug! If you need real-time help, join us on Discord."
- type: textarea
  attributes:
    label: Bug Description
- type: textarea
  attributes:
    label: true

可以通过为 label 提供字符串值来修复此错误。如果您想使用可能被解析为布尔值、整数或小数的 label 值,则应将该值用引号括起来。例如,使用 "true""1.3" 而不是 true1.3

- type: markdown
  attributes:
    value: "Thanks for taking the time to fill out this bug! If you need real-time help, join us on Discord."
- type: textarea
  attributes:
    label: Bug Description
- type: textarea
  attributes:
    label: Environment Details

当属性需要字符串时,不允许使用空字符串或仅包含空格的字符串。例如,不允许使用 """ "

如果属性是必需的,则值必须是非空字符串。如果字段不是必需的,则应删除键值对。

body:
- type: input
  attributes:
    label: "Name"

Body[i]: id 只能包含数字、字母、-、_

id 属性只能包含字母数字字符、-_。您的模板可能在 id 中包含不允许的字符,例如空格。

body 的错误将以body[i]为前缀,其中i表示包含错误的主体块的索引。例如,body[0] 告诉我们错误是由body 列表中的第一个块引起的。

示例:"body[i]: id 只能包含数字、字母、-、_" 错误

name: "Bug report"
body:
- type: input
  id: first name
  attributes:
    label: First name

可以通过确保从 id 值中删除空格和其他不允许的字符来修复此错误。

name: "Bug report"
body:
- type: input
  id: first-name
  attributes:
    label: First name

Body[i]: x 不是允许的键

在与 typeattributes 相同的缩进级别上,提供了一个意外的键 x

body 的错误将以body[i]为前缀,其中i表示包含错误的主体块的索引。例如,body[0] 告诉我们错误是由body 列表中的第一个块引起的。

“body[i]: x 不是允许的键” 错误示例

body:
- type: markdown
  x: woof
  attributes:
    value: "Thanks for taking the time to fill out this bug! If you need real-time help, join us on Discord."

可以通过删除多余的键并仅使用 typeattributesid 来修复此错误。

body:
- type: markdown
  attributes:
    value: "Thanks for taking the time to fill out this bug! If you need real-time help, join us on Discord."

Body[i]: label 包含禁止词语

为了最大程度地降低在 GitHub Issues 中公开发布私人信息和凭据的风险,一些攻击者常用的词语在输入或文本区域元素的 label 中是不允许的。

body 的错误将以body[i]为前缀,其中i表示包含错误的主体块的索引。例如,body[0] 告诉我们错误是由body 列表中的第一个块引起的。

“body[i]: label 包含禁止词语” 错误示例

body:
- type: markdown
  attributes:
    value: Hello world!
- type: input
  attributes:
    label: Password

可以通过从任何 label 字段中删除诸如“password”之类的术语来修复此错误。

body:
- type: markdown
  attributes:
    value: Hello world!
- type: input
  attributes:
    label: Username

Body[i]: x 不是允许的属性

attributes 块中提供了无效的键。

body 的错误将以body[i]为前缀,其中i表示包含错误的主体块的索引。例如,body[0] 告诉我们错误是由body 列表中的第一个块引起的。

“body[i]: x 不是允许的属性” 错误示例

body:
- type: markdown
  attributes:
    x: "a random key!"
    value: "Thanks for taking the time to fill out this bug!"

可以通过删除多余的键并仅使用允许的属性来修复此错误。

body:
- type: markdown
  attributes:
    value: "Thanks for taking the time to fill out this bug!"

Body[i]: options 必须是唯一的

对于复选框和下拉输入类型,在 options 数组中定义的选择必须是唯一的。

body 的错误将以body[i]为前缀,其中i表示包含错误的主体块的索引。例如,body[0] 告诉我们错误是由body 列表中的第一个块引起的。

“body[i]: options 必须是唯一的” 错误示例

body:
- type: dropdown
  attributes:
    label: Favorite dessert
    options:
      - ice cream
      - ice cream
      - pie

可以通过确保 options 数组中不存在重复的选择来修复此错误。

body:
- type: dropdown
  attributes:
    label: Favorite dessert
    options:
      - ice cream
      - pie

Body[i]: options 不得包含保留字“none”

“None” 是 options 集合中的保留字,因为它用于在 dropdown 不是必需时指示非选择。

body 的错误将以body[i]为前缀,其中i表示包含错误的主体块的索引。例如,body[0] 告诉我们错误是由body 列表中的第一个块引起的。

“body[i]: options 不得包含保留字“none”” 错误示例

body:
- type: dropdown
  attributes:
    label: What types of pie do you like?
    options:
      - Steak & Ale
      - Chicken & Leek
      - None
  validations:
    required: true

可以通过删除“None” 作为选项来修复此错误。如果你希望贡献者能够表明他们不喜欢这些类型的馅饼,你可以另外删除 required 验证。

body:
- type: dropdown
  attributes:
    label: What types of pie do you like?
    options:
      - Steak & Ale
      - Chicken & Leek

在此示例中,“None” 将自动填充为可选择选项。

Body[i]: options 不得包含布尔值。请将诸如“yes”和“true”之类的值用引号括起来

YAML 解析器会将许多英文单词处理为布尔值,除非它们用引号括起来。对于下拉 options,所有项目必须是字符串而不是布尔值。

body 的错误将以body[i]为前缀,其中i表示包含错误的主体块的索引。例如,body[0] 告诉我们错误是由body 列表中的第一个块引起的。

“body[i]: options 不得包含布尔值。请将诸如“yes”和“true”之类的值用引号括起来” 错误示例

body:
- type: dropdown
  attributes:
    label: Do you like pie?
    options:
      - Yes
      - No
      - Maybe

可以通过将每个有问题的选项用引号括起来来解决此错误,以防止它们被处理为布尔值。

body:
- type: dropdown
  attributes:
    label: Do you like pie?
    options:
      - "Yes"
      - "No"
      - Maybe

正文不能为空

模板正文key:value对不能为空。有关哪些顶级键是必需的,请参阅“问题表单语法”。

可以通过添加body:部分来解决此错误。

"正文不能为空"错误示例

name: Support Request
description: Something went wrong and you need help?
---
body:
- type: textarea
  attributes:
    label: "What's wrong?"

在此示例中,可以通过删除标题和body部分之间的---(文档分隔符)来解决此错误。

name: Support Request
description: Something went wrong and you need help?

body:
- type: textarea
  attributes:
    label: "What's wrong?"

进一步阅读