改进“访问附加数据”中表达不清的翻译

修改理由:
详细描述:
改进“访问附加数据”中表达不清的翻译
原文:All of the data under validation.
原翻译:所有数据都在验证中。
修改后:即将进行验证的所有数据
相关信息:
- 类型:文档文章
- 文章: 表单验证
- 文档: 《Laravel 9 中文文档(9.x)》
此投稿由 chowjiawei 在 2年前 合并。
标题修改:
内容修改:
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 |