改进“访问附加数据”中表达不清的翻译
修改理由:
详细描述:
改进“访问附加数据”中表达不清的翻译
原文:All of the data under validation.
原翻译:所有数据都在验证中。
修改后:即将进行验证的所有数据
相关信息:
- 类型:文档文章
- 文章: 表单验证
- 文档: 《Laravel 9 中文文档(9.x)》
此投稿由 chowjiawei 在 3年前 合并。
标题修改:
内容修改:
| Old | New | Differences |
|---|---|---|
| 1 | ||
| 2 | 1 | # Validation |
| 3 | 2 | |
| 4 | 3 | - [简介](#introduction) | … | … |
| 41 | 40 | |
| 42 | 41 | Laravel 包含了各种方便的验证规则,你可以将它们应用于数据,甚至可以验证给定数据库表中的值是否唯一。我们将详细介绍每个验证规则,以便你熟悉 Laravel 的所有验证功能。 |
| 43 | 42 | |
| 44 | ||
| 45 | ||
| 43 | ||
| 44 | ||
| 46 | 45 | <a name="validation-quickstart"></a> |
| 47 | 46 | ## 快速验证 |
| 48 | 47 | … | … |
| 100 | 99 | ### 编写验证逻辑 |
| 101 | 100 | |
| 102 | 101 | 现在我们开始在 `store` 方法中编写用来验证新的博客文章的逻辑代码。为此,我们将使用 `Illuminate\Http\Request` 类提供的 `validate` 方法。如果验证通过,你的代码会继续正常运行。如果验证失败,则会抛出`Illuminate\Validation\ValidationException`异常,并自动将对应的错误响应返回给用户。 |
| 103 | ||
| 104 | ||
| 102 | ||
| 103 | ||
| 105 | 104 | 如果在传统 HTTP 请求期间验证失败,则会生成对先前 URL 的重定向响应。如果传入的请求是 XHR,将将返回包含验证错误信息的 JSON 响应。 |
| 106 | 105 | |
| 107 | 106 | 为了深入理解 `validate` 方法,让我们接着回到 `store` 方法中: | … | … |
| 150 | 149 | |
| 151 | 150 | 在这个例子中,如果 `title` 字段没有通过 `unique` 规则,那么不会继续验证 `max` 规则。规则会按照分配时的顺序来验证。 |
| 152 | 151 | |
| 153 | ||
| 154 | ||
| 152 | ||
| 153 | ||
| 155 | 154 | <a name="a-note-on-nested-attributes"></a> |
| 156 | 155 | #### 嵌套字段的说明 |
| 157 | 156 | … | … |
| 197 | 196 | <!-- Create Post Form --> |
| 198 | 197 | ``` |
| 199 | 198 | |
| 200 | ||
| 201 | ||
| 199 | ||
| 200 | ||
| 202 | 201 | <a name="quick-customizing-the-error-messages"></a> |
| 203 | 202 | #### 自定义错误消息 |
| 204 | 203 | … | … |
| 237 | 236 | <input ... class="@error('title', 'post') is-invalid @enderror"> |
| 238 | 237 | ``` |
| 239 | 238 | |
| 240 | ||
| 241 | ||
| 239 | ||
| 240 | ||
| 242 | 241 | <a name="repopulating-forms"></a> |
| 243 | 242 | ### 回填表单 |
| 244 | 243 | … | … |
| 267 | 266 | |
| 268 | 267 | 在上述例子中,我们指定了 `publish_at` 字段可以是`null`的或者是一个有效的日期格式。如果 `nullable` 修饰词没有被添加到规则定义中,验证器会将 `null` 视为无效的日期格式。 |
| 269 | 268 | |
| 270 | ||
| 271 | ||
| 269 | ||
| 270 | ||
| 272 | 271 | <a name="form-request-validation"></a> |
| 273 | 272 | ## 验证表单请求 |
| 274 | 273 | … | … |
| 320 | 319 | $validated = $request->safe()->except(['name', 'email']); |
| 321 | 320 | } |
| 322 | 321 | |
| 323 | ||
| 324 | ||
| 322 | ||
| 323 | ||
| 325 | 324 | 如果验证失败,就会生成一个让用户返回到先前位置的重定向响应。这些错误也会被闪存到 session 中,以便这些错误都可以在页面中显示出来。如果传入的请求是 XHR,会向用户返回具有 422 状态代码和验证错误信息的 JSON 数据的 HTTP 响应。 |
| 326 | 325 | |
| 327 | 326 | <a name="adding-after-hooks-to-form-requests"></a> | … | … |
| 369 | 368 | */ |
| 370 | 369 | protected $redirect = '/dashboard'; |
| 371 | 370 | |
| 372 | ||
| 373 | ||
| 371 | ||
| 372 | ||
| 374 | 373 | 或者,如果你想将用户重定向到一个命名路由,你可以定义一个 `$redirectRoute` 属性来代替: |
| 375 | 374 | |
| 376 | 375 | /** | … | … |
| 409 | 408 | |
| 410 | 409 | 如果 `authorize` 方法返回 `false`,则会自动返回一个包含 403 状态码的 HTTP 响应,也不会运行控制器的方法。 |
| 411 | 410 | |
| 412 | ||
| 413 | ||
| 411 | ||
| 412 | ||
| 414 | 413 | 如果您打算在应用程序的其它部分处理请求的授权逻辑,只需从 `authorize` 方法返回 `true`: |
| 415 | 414 | |
| 416 | 415 | /** | … | … |
| 479 | 478 | ]); |
| 480 | 479 | } |
| 481 | 480 | |
| 482 | ||
| 483 | ||
| 481 | ||
| 482 | ||
| 484 | 483 | <a name="manually-creating-validators"></a> |
| 485 | 484 | ## 手动创建验证器 |
| 486 | 485 | … | … |
| 538 | 537 | // ... |
| 539 | 538 | } |
| 540 | 539 | |
| 541 | ||
| 542 | ||
| 540 | ||
| 541 | ||
| 543 | 542 | <a name="automatic-redirection"></a> |
| 544 | 543 | ### 自动重定向 |
| 545 | 544 | … | … |
| 580 | 579 | 'required' => 'The :attribute field is required.', |
| 581 | 580 | ]); |
| 582 | 581 | |
| 583 | ||
| 584 | ||
| 582 | ||
| 583 | ||
| 585 | 584 | 在此示例中,`:attribute` 占位符将被验证中的字段的实际名称替换。您也可以在验证消息中使用其它占位符。例如: |
| 586 | 585 | |
| 587 | 586 | $messages = [ | … | … |
| 628 | 627 | // |
| 629 | 628 | } |
| 630 | 629 | |
| 631 | ||
| 632 | ||
| 630 | ||
| 631 | ||
| 633 | 632 | <a name="working-with-validated-input"></a> |
| 634 | 633 | ## 处理验证字段 |
| 635 | 634 | … | … |
| 672 | 671 | |
| 673 | 672 | 通过 `Validator` 实例调用 `errors` 方法,它会返回一个 `Illuminate\Support\MessageBag` 实例,该实例包含了各种可以很方便地处理错误信息的方法。并自动给所有视图提供 `$errors` 变量,也是 `MessageBag` 类的一个实例。 |
| 674 | 673 | |
| 675 | ||
| 676 | ||
| 674 | ||
| 675 | ||
| 677 | 676 | <a name="retrieving-the-first-error-message-for-a-field"></a> |
| 678 | 677 | #### 检索特定字段的第一个错误信息 |
| 679 | 678 | … | … |
| 723 | 722 | |
| 724 | 723 | 此外,您可以将此文件复制到另一个翻译语言目录中,以翻译应用程序语言的消息。要了解有关 Laravel 本地化的更多信息,请查看完整的[本地化文档](/docs/laravel/9.x/localization)。 |
| 725 | 724 | |
| 726 | ||
| 727 | ||
| 725 | ||
| 726 | ||
| 728 | 727 | <a name="custom-messages-for-specific-attributes"></a> |
| 729 | 728 | #### 特定属性的自定义消息 |
| 730 | 729 | … | … |
| 761 | 760 | The credit card number field is required when payment type is cc. |
| 762 | 761 | ``` |
| 763 | 762 | |
| 764 | ||
| 765 | ||
| 763 | ||
| 764 | ||
| 766 | 765 | 你可以通过定义 `values` 数组在 `lang/xx/validation.php` 语言文件中指定更用户友好的提示,而不是将 `cc` 显示为支付类型值: |
| 767 | 766 | |
| 768 | 767 | 'values' => [ | … | … |
| 878 | 877 | |
| 879 | 878 | </div> |
| 880 | 879 | |
| 881 | ||
| 882 | ||
| 880 | ||
| 881 | ||
| 883 | 882 | <a name="rule-accepted"></a> |
| 884 | 883 | #### accepted |
| 885 | 884 | … | … |
| 921 | 920 | |
| 922 | 921 | 待验证字段可以含有字母、数字,短破折号(-)和下划线(_)。 |
| 923 | 922 | |
| 924 | ||
| 925 | ||
| 923 | ||
| 924 | ||
| 926 | 925 | <a name="rule-alpha-num"></a> |
| 927 | 926 | #### alpha_num |
| 928 | 927 | … | … |
| 970 | 969 | <a name="rule-before-or-equal"></a> |
| 971 | 970 | #### before\_or\_equal:_date_ |
| 972 | 971 | |
| 973 | ||
| 974 | ||
| 972 | ||
| 973 | ||
| 975 | 974 | 待验证字段的值对应的日期必须在给定的日期之前。日期将会传递给 PHP 函数 `strtotime`。此外,与 [`after`](#rule-after)规则一致,可以将另外一个待验证的字段作为 `date` 的值。 |
| 976 | 975 | |
| 977 | 976 | <a name="rule-between"></a> | … | … |
| 1007 | 1006 | 验证字段必须等于给定日期。日期将传递到 PHP `strtotime` 函数中,以便转换为有效的 `DateTime` 实例。 |
| 1008 | 1007 | |
| 1009 | 1008 | <a name="rule-date-format"></a> |
| 1010 | ||
| 1011 | ||
| 1009 | ||
| 1010 | ||
| 1012 | 1011 | #### date_format:_format_ |
| 1013 | 1012 | |
| 1014 | 1013 | 验证字段必须匹配给定的 _format_(日期格式)。当验证某个字段的时候,你应该只使用 `date` 或者 `date_format` **其中一个** ,而不是同时使用。此验证规则支持 PHP 所有的 [DateTime](https://www.php.net/manual/en/class.datetime.php) 类。 | … | … |
| 1063 | 1062 | ], |
| 1064 | 1063 | ]); |
| 1065 | 1064 | |
| 1066 | ||
| 1067 | ||
| 1065 | ||
| 1066 | ||
| 1068 | 1067 | <a name="rule-distinct"></a> |
| 1069 | 1068 | #### distinct |
| 1070 | 1069 | … | … |
| 1122 | 1121 | |
| 1123 | 1122 | > 注意:枚举仅适用于PHP 8.1+. |
| 1124 | 1123 | |
| 1125 | ||
| 1126 | ||
| 1124 | ||
| 1125 | ||
| 1127 | 1126 | <a name="rule-exclude"></a> |
| 1128 | 1127 | #### exclude |
| 1129 | 1128 | … | … |
| 1163 | 1162 | |
| 1164 | 1163 | 'state' => 'exists:states,abbreviation' |
| 1165 | 1164 | |
| 1166 | ||
| 1167 | ||
| 1165 | ||
| 1166 | ||
| 1168 | 1167 | 有时候,你或许需要去明确指定一个具体的数据库连接,用于`exists`查询。你可以通过在表名前面添加一个连接名称来实现这个效果。 |
| 1169 | 1168 | |
| 1170 | 1169 | 'email' => 'exists:connection.staff,email' | … | … |
| 1206 | 1205 | #### gte:_field_ |
| 1207 | 1206 | |
| 1208 | 1207 | 要验证的字段必须要大于或等于被给的字段。这两个字段必须是同一个类型。字符串、数字、数组和文件都使用 [`size`](#rule-size) 进行相同的评估。 |
| 1209 | ||
| 1210 | ||
| 1208 | ||
| 1209 | ||
| 1211 | 1210 | <a name="rule-image"></a> |
| 1212 | 1211 | #### image |
| 1213 | 1212 | … | … |
| 1260 | 1259 | <a name="rule-ip"></a> |
| 1261 | 1260 | #### ip |
| 1262 | 1261 | |
| 1263 | ||
| 1264 | ||
| 1262 | ||
| 1263 | ||
| 1265 | 1264 | 验证的字段必须是 IP 地址。 |
| 1266 | 1265 | |
| 1267 | 1266 | <a name="ipv4"></a> | … | … |
| 1308 | 1307 | |
| 1309 | 1308 | 为了确定上传文件的 MIME,框架将会读取文件,然后自动推测文件 MIME 类型,这可能与客户端提供的 MIME 类型不一致。 |
| 1310 | 1309 | |
| 1311 | ||
| 1312 | ||
| 1310 | ||
| 1311 | ||
| 1313 | 1312 | <a name="rule-mimes"></a> |
| 1314 | 1313 | #### mimes:_foo_,_bar_,... |
| 1315 | 1314 | … | … |
| 1359 | 1358 | |
| 1360 | 1359 | > 注意:当使用 `regex` / `not_regex` 模式时, 可能需要在数组中指定规则,而不是使用 `|` 分隔符 ,特别是在正则表达式包含 `|` 字符 的情况下。 |
| 1361 | 1360 | |
| 1362 | ||
| 1363 | ||
| 1361 | ||
| 1362 | ||
| 1364 | 1363 | <a name="rule-nullable"></a> |
| 1365 | 1364 | #### nullable |
| 1366 | 1365 | … | … |
| 1412 | 1411 | |
| 1413 | 1412 | > 注意:当使用 `regex` / `not_regex` 模式时, 可能需要在数组中指定规则,而不是使用 `|` 分隔符 ,特别是在正则表达式包含 `|` 字符 的情况下。 |
| 1414 | 1413 | |
| 1415 | ||
| 1416 | ||
| 1414 | ||
| 1415 | ||
| 1417 | 1416 | <a name="rule-required"></a> |
| 1418 | 1417 | #### required |
| 1419 | 1418 | … | … |
| 1453 | 1452 | |
| 1454 | 1453 | 除非_anotherfield_ 字段等于任何_value_,否则验证中的字段必须存在且不为空。 这也意味着 _anotherfield_ 必须存在于请求数据中,除非 _value_ 为 `null`。 如果 _value_ 为 `null` (`required_unless:name,null`),则需要验证的字段,除非比较字段为 `null` 或请求数据中缺少比较字段。 |
| 1455 | 1454 | |
| 1456 | ||
| 1457 | ||
| 1455 | ||
| 1456 | ||
| 1458 | 1457 | <a name="rule-required-with"></a> |
| 1459 | 1458 | #### required_with:_foo_,_bar_,... |
| 1460 | 1459 | … | … |
| 1502 | 1501 | // 验证上传的文件是否正好为 512 KB... |
| 1503 | 1502 | 'image' => 'file|size:512'; |
| 1504 | 1503 | |
| 1505 | ||
| 1506 | ||
| 1504 | ||
| 1505 | ||
| 1507 | 1506 | <a name="rule-starts-with"></a> |
| 1508 | 1507 | #### starts_with:_foo_,_bar_,... |
| 1509 | 1508 | … | … |
| 1544 | 1543 | |
| 1545 | 1544 | 有时,您可能希望在唯一验证期间忽略给定的 ID。 例如,考虑一个包含用户姓名、电子邮件地址和位置的“更新个人资料”屏幕。 您可能需要验证电子邮件地址是否唯一。 但是,如果用户只更改名称字段而不更改电子邮件字段,则您不希望引发验证错误,因为用户已经是相关电子邮件地址的所有者。 |
| 1546 | 1545 | |
| 1547 | ||
| 1548 | ||
| 1546 | ||
| 1547 | ||
| 1549 | 1548 | 为了指示验证器忽略用户 ID,我们将使用 `Rule` 类来流畅地定义规则。 在这个例子中,我们还将验证规则指定为一个数组,而不是使用 `|` 字符来分隔规则: |
| 1550 | 1549 | |
| 1551 | 1550 | use Illuminate\Support\Facades\Validator; | … | … |
| 1580 | 1579 | return $query->where('account_id', 1); |
| 1581 | 1580 | }) |
| 1582 | 1581 | |
| 1583 | ||
| 1584 | ||
| 1582 | ||
| 1583 | ||
| 1585 | 1584 | <a name="rule-url"></a> |
| 1586 | 1585 | #### url |
| 1587 | 1586 | … | … |
| 1629 | 1628 | |
| 1630 | 1629 | > 技巧:如果您尝试验证应始终存在但可能为空的字段,请查看 [关于可选字段的此注释](#a-note-on-optional-fields)。 |
| 1631 | 1630 | |
| 1632 | ||
| 1633 | ||
| 1631 | ||
| 1632 | ||
| 1634 | 1633 | <a name="complex-conditional-validation"></a> |
| 1635 | 1634 | #### 复杂的条件验证 |
| 1636 | 1635 | … | … |
| 1657 | 1656 | |
| 1658 | 1657 | > 技巧:传递给闭包的 `$input` 参数将是 `Illuminate\Support\Fluent` 的一个实例,可用于访问您的输入和正在验证的文件。 |
| 1659 | 1658 | |
| 1660 | ||
| 1661 | ||
| 1659 | ||
| 1660 | ||
| 1662 | 1661 | <a name="complex-conditional-array-validation"></a> |
| 1663 | 1662 | #### 复杂的条件数组验证 |
| 1664 | 1663 | … | … |
| 1719 | 1718 | 'photos.profile' => 'required|image', |
| 1720 | 1719 | ]); |
| 1721 | 1720 | |
| 1722 | ||
| 1723 | ||
| 1721 | ||
| 1722 | ||
| 1724 | 1723 | 您还可以验证数组的每个元素。 例如,要验证给定数组输入字段中的每封电子邮件是否唯一,您可以执行以下操作: |
| 1725 | 1724 | |
| 1726 | 1725 | $validator = Validator::make($request->all(), [ | … | … |
| 1783 | 1782 | // 至少需要一个符号... |
| 1784 | 1783 | Password::min(8)->symbols() |
| 1785 | 1784 | |
| 1786 | ||
| 1787 | ||
| 1785 | ||
| 1786 | ||
| 1788 | 1787 | 此外,您可以使用 `uncompromised` 方法确保密码没有在公共密码数据泄露事件中被泄露: |
| 1789 | 1788 | |
| 1790 | 1789 | Password::min(8)->uncompromised() | … | … |
| 1834 | 1833 | |
| 1835 | 1834 | 'password' => ['required', Password::defaults()], |
| 1836 | 1835 | |
| 1837 | ||
| 1838 | ||
| 1836 | ||
| 1837 | ||
| 1839 | 1838 | 有时,您可能希望将其他验证规则附加到默认密码验证规则。 您可以使用 `rules` 方法来完成此操作: |
| 1840 | 1839 | |
| 1841 | 1840 | use App\Rules\ZxcvbnRule; | … | … |
| 1891 | 1890 | } |
| 1892 | 1891 | } |
| 1893 | 1892 | |
| 1894 | ||
| 1895 | ||
| 1893 | ||
| 1894 | ||
| 1896 | 1895 | 如果您想从翻译文件中返回错误消息,您可以从您的 `message` 方法中调用 `trans` 助手: |
| 1897 | 1896 | |
| 1898 | 1897 | /** | … | … |
| 1915 | 1914 | |
| 1916 | 1915 | #### 访问附加数据 |
| 1917 | 1916 | |
| 1918 | 如果您的自定义验证规则类需要访问所有其他正在验证的数据,您的规则类可以实现 `Illuminate\Contracts\Validation\DataAwareRule` 接口。 这个接口需要你的类定义一个 `setData` 方法。 Laravel 将自动调用此方法(在验证进行之前), | |
| 1917 | 如果您的自定义验证规则类需要访问所有其他正在验证的数据,您的规则类可以实现 `Illuminate\Contracts\Validation\DataAwareRule` 接口。 这个接口需要你的类定义一个 `setData` 方法。 Laravel 将自动调用此方法(在验证进行之前),`$data` 包含所有即将验证的数据: | |
| 1919 | 1918 | |
| 1920 | 1919 | <?php |
| 1921 | 1920 | … | … |
| 1927 | 1926 | class Uppercase implements Rule, DataAwareRule |
| 1928 | 1927 | { |
| 1929 | 1928 | /** |
| 1930 | * | |
| 1929 | * 即将进行验证的所有数据 | |
| 1931 | 1930 | * |
| 1932 | 1931 | * @var array |
| 1933 | 1932 | */ | … | … |
| 1936 | 1935 | // ... |
| 1937 | 1936 | |
| 1938 | 1937 | /** |
| 1939 | * 设置 | |
| 1938 | * 设置即将进行验证的所有数据。 | |
| 1940 | 1939 | * |
| 1941 | 1940 | * @param array $data |
| 1942 | 1941 | * @return $this | … | … |
| 1984 | 1983 | } |
| 1985 | 1984 | |
| 1986 | 1985 | <a name="using-closures"></a> |
| 1987 | ||
| 1988 | ||
| 1986 | ||
| 1987 | ||
| 1989 | 1988 | ### 使用闭包 |
| 1990 | 1989 | |
| 1991 | 1990 | 如果您在整个应用程序中只需要一次自定义规则的功能,您可以使用闭包而不是规则对象。 闭包接收属性的名称、属性的值和一个在验证失败时应该调用的 `$fail` 回调: | … | … |
| 2026 | 2025 | ``` |
| 2027 | 2026 | |
| 2028 | 2027 | > 注意:“隐式”规则仅_implicit_该属性是必需的。 它是否实际上使缺失或空属性无效取决于您。 |
| 2028 | ||
| 2029 | 2029 | |
| 2030 |
关于 LearnKu