微波炉 2年前

修改理由:

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

详细描述:

改进“访问附加数据”中表达不清的翻译
原文:All of the data under validation.
原翻译:所有数据都在验证中。
修改后:即将进行验证的所有数据

相关信息:


此投稿由 chowjiawei 2年前 合并。

标题修改:

+ 表单验证

内容修改:

红色背景 为原始内容

绿色背景 为新增或者修改的内容

OldNewDifferences
1  
21# Validation
32
43- [简介](#introduction)
 
4140
4241Laravel 包含了各种方便的验证规则,你可以将它们应用于数据,甚至可以验证给定数据库表中的值是否唯一。我们将详细介绍每个验证规则,以便你熟悉 Laravel 的所有验证功能。
4342
44 
45 
 43
 44
4645<a name="validation-quickstart"></a>
4746## 快速验证
4847
 
10099### 编写验证逻辑
101100
102101现在我们开始在 `store` 方法中编写用来验证新的博客文章的逻辑代码。为此,我们将使用 `Illuminate\Http\Request` 类提供的 `validate` 方法。如果验证通过,你的代码会继续正常运行。如果验证失败,则会抛出`Illuminate\Validation\ValidationException`异常,并自动将对应的错误响应返回给用户。
103 
104 
 102
 103
105104如果在传统 HTTP 请求期间验证失败,则会生成对先前 URL 的重定向响应。如果传入的请求是 XHR,将将返回包含验证错误信息的 JSON 响应。
106105
107106为了深入理解 `validate` 方法,让我们接着回到 `store` 方法中:
 
150149
151150在这个例子中,如果 `title` 字段没有通过 `unique` 规则,那么不会继续验证 `max` 规则。规则会按照分配时的顺序来验证。
152151
153 
154 
 152
 153
155154<a name="a-note-on-nested-attributes"></a>
156155#### 嵌套字段的说明
157156
 
197196<!-- Create Post Form -->
198197```
199198
200 
201 
 199
 200
202201<a name="quick-customizing-the-error-messages"></a>
203202#### 自定义错误消息
204203
 
237236<input ... class="@error('title', 'post') is-invalid @enderror">
238237```
239238
240 
241 
 239
 240
242241<a name="repopulating-forms"></a>
243242### 回填表单
244243
 
267266
268267在上述例子中,我们指定了 `publish_at` 字段可以是`null`的或者是一个有效的日期格式。如果 `nullable` 修饰词没有被添加到规则定义中,验证器会将 `null` 视为无效的日期格式。
269268
270 
271 
 269
 270
272271<a name="form-request-validation"></a>
273272## 验证表单请求
274273
 
320319       $validated = $request->safe()->except(['name', 'email']);
321320   }
322321
323 
324 
 322
 323
325324如果验证失败,就会生成一个让用户返回到先前位置的重定向响应。这些错误也会被闪存到 session 中,以便这些错误都可以在页面中显示出来。如果传入的请求是 XHR,会向用户返回具有 422 状态代码和验证错误信息的 JSON 数据的 HTTP 响应。
326325
327326<a name="adding-after-hooks-to-form-requests"></a>
 
369368    */
370369   protected $redirect = '/dashboard';
371370
372 
373 
 371
 372
374373或者,如果你想将用户重定向到一个命名路由,你可以定义一个 `$redirectRoute` 属性来代替:
375374
376375   /**
 
409408
410409如果 `authorize` 方法返回 `false`,则会自动返回一个包含 403 状态码的 HTTP 响应,也不会运行控制器的方法。
411410
412 
413 
 411
 412
414413如果您打算在应用程序的其它部分处理请求的授权逻辑,只需从 `authorize` 方法返回 `true`:
415414
416415   /**
 
479478       ]);
480479   }
481480
482 
483 
 481
 482
484483<a name="manually-creating-validators"></a>
485484## 手动创建验证器
486485
 
538537       // ...
539538   }
540539
541 
542 
 540
 541
543542<a name="automatic-redirection"></a>
544543### 自动重定向
545544
 
580579       'required' => 'The :attribute field is required.',
581580   ]);
582581
583 
584 
 582
 583
585584在此示例中,`:attribute` 占位符将被验证中的字段的实际名称替换。您也可以在验证消息中使用其它占位符。例如:
586585
587586   $messages = [
 
628627       //
629628   }
630629
631 
632 
 630
 631
633632<a name="working-with-validated-input"></a>
634633## 处理验证字段
635634
 
672671
673672通过 `Validator` 实例调用 `errors` 方法,它会返回一个 `Illuminate\Support\MessageBag` 实例,该实例包含了各种可以很方便地处理错误信息的方法。并自动给所有视图提供 `$errors` 变量,也是 `MessageBag` 类的一个实例。
674673
675 
676 
 674
 675
677676<a name="retrieving-the-first-error-message-for-a-field"></a>
678677#### 检索特定字段的第一个错误信息
679678
 
723722
724723此外,您可以将此文件复制到另一个翻译语言目录中,以翻译应用程序语言的消息。要了解有关 Laravel 本地化的更多信息,请查看完整的[本地化文档](/docs/laravel/9.x/localization)。
725724
726 
727 
 725
 726
728727<a name="custom-messages-for-specific-attributes"></a>
729728#### 特定属性的自定义消息
730729
 
761760The credit card number field is required when payment type is cc.
762761```
763762
764 
765 
 763
 764
766765你可以通过定义 `values` 数组在 `lang/xx/validation.php` 语言文件中指定更用户友好的提示,而不是将 `cc` 显示为支付类型值:
767766
768767   'values' => [
 
878877
879878</div>
880879
881 
882 
 880
 881
883882<a name="rule-accepted"></a>
884883#### accepted
885884
 
921920
922921待验证字段可以含有字母、数字,短破折号(-)和下划线(_)。
923922
924 
925 
 923
 924
926925<a name="rule-alpha-num"></a>
927926#### alpha_num
928927
 
970969<a name="rule-before-or-equal"></a>
971970#### before\_or\_equal:_date_
972971
973 
974 
 972
 973
975974待验证字段的值对应的日期必须在给定的日期之前。日期将会传递给 PHP 函数 `strtotime`。此外,与 [`after`](#rule-after)规则一致,可以将另外一个待验证的字段作为 `date` 的值。
976975
977976<a name="rule-between"></a>
 
10071006验证字段必须等于给定日期。日期将传递到 PHP `strtotime` 函数中,以便转换为有效的 `DateTime` 实例。
10081007
10091008<a name="rule-date-format"></a>
1010 
1011 
 1009
 1010
10121011#### date_format:_format_
10131012
10141013验证字段必须匹配给定的 _format_(日期格式)。当验证某个字段的时候,你应该只使用 `date` 或者 `date_format` **其中一个** ,而不是同时使用。此验证规则支持 PHP 所有的 [DateTime](https://www.php.net/manual/en/class.datetime.php) 类。
 
10631062       ],
10641063   ]);
10651064
1066 
1067 
 1065
 1066
10681067<a name="rule-distinct"></a>
10691068#### distinct
10701069
 
11221121
11231122> 注意:枚举仅适用于PHP 8.1+.
11241123
1125 
1126 
 1124
 1125
11271126<a name="rule-exclude"></a>
11281127#### exclude
11291128
 
11631162
11641163   'state' => 'exists:states,abbreviation'
11651164
1166 
1167 
 1165
 1166
11681167有时候,你或许需要去明确指定一个具体的数据库连接,用于`exists`查询。你可以通过在表名前面添加一个连接名称来实现这个效果。
11691168
11701169   'email' => 'exists:connection.staff,email'
 
12061205#### gte:_field_
12071206
12081207要验证的字段必须要大于或等于被给的字段。这两个字段必须是同一个类型。字符串、数字、数组和文件都使用 [`size`](#rule-size) 进行相同的评估。
1209 
1210 
 1208
 1209
12111210<a name="rule-image"></a>
12121211#### image
12131212
 
12601259<a name="rule-ip"></a>
12611260#### ip
12621261
1263 
1264 
 1262
 1263
12651264验证的字段必须是 IP 地址。
12661265
12671266<a name="ipv4"></a>
 
13081307
13091308为了确定上传文件的 MIME,框架将会读取文件,然后自动推测文件 MIME 类型,这可能与客户端提供的 MIME 类型不一致。
13101309
1311 
1312 
 1310
 1311
13131312<a name="rule-mimes"></a>
13141313#### mimes:_foo_,_bar_,...
13151314
 
13591358
13601359> 注意:当使用 `regex` / `not_regex` 模式时, 可能需要在数组中指定规则,而不是使用 `|` 分隔符 ,特别是在正则表达式包含 `|` 字符 的情况下。
13611360
1362 
1363 
 1361
 1362
13641363<a name="rule-nullable"></a>
13651364#### nullable
13661365
 
14121411
14131412> 注意:当使用 `regex` / `not_regex` 模式时, 可能需要在数组中指定规则,而不是使用 `|` 分隔符 ,特别是在正则表达式包含 `|` 字符 的情况下。
14141413
1415 
1416 
 1414
 1415
14171416<a name="rule-required"></a>
14181417#### required
14191418
 
14531452
14541453除非_anotherfield_ 字段等于任何_value_,否则验证中的字段必须存在且不为空。 这也意味着 _anotherfield_ 必须存在于请求数据中,除非 _value_ 为 `null`。 如果 _value_ 为 `null` (`required_unless:name,null`),则需要验证的字段,除非比较字段为 `null` 或请求数据中缺少比较字段。
14551454
1456 
1457 
 1455
 1456
14581457<a name="rule-required-with"></a>
14591458#### required_with:_foo_,_bar_,...
14601459
 
15021501   // 验证上传的文件是否正好为 512 KB...
15031502   'image' => 'file|size:512';
15041503
1505 
1506 
 1504
 1505
15071506<a name="rule-starts-with"></a>
15081507#### starts_with:_foo_,_bar_,...
15091508
 
15441543
15451544有时,您可能希望在唯一验证期间忽略给定的 ID。 例如,考虑一个包含用户姓名、电子邮件地址和位置的“更新个人资料”屏幕。 您可能需要验证电子邮件地址是否唯一。 但是,如果用户只更改名称字段而不更改电子邮件字段,则您不希望引发验证错误,因为用户已经是相关电子邮件地址的所有者。
15461545
1547 
1548 
 1546
 1547
15491548为了指示验证器忽略用户 ID,我们将使用 `Rule` 类来流畅地定义规则。 在这个例子中,我们还将验证规则指定为一个数组,而不是使用 `|` 字符来分隔规则:
15501549
15511550   use Illuminate\Support\Facades\Validator;
 
15801579       return $query->where('account_id', 1);
15811580   })
15821581
1583 
1584 
 1582
 1583
15851584<a name="rule-url"></a>
15861585#### url
15871586
 
16291628
16301629> 技巧:如果您尝试验证应始终存在但可能为空的字段,请查看 [关于可选字段的此注释](#a-note-on-optional-fields)。
16311630
1632 
1633 
 1631
 1632
16341633<a name="complex-conditional-validation"></a>
16351634#### 复杂的条件验证
16361635
 
16571656
16581657> 技巧:传递给闭包的 `$input` 参数将是 `Illuminate\Support\Fluent` 的一个实例,可用于访问您的输入和正在验证的文件。
16591658
1660 
1661 
 1659
 1660
16621661<a name="complex-conditional-array-validation"></a>
16631662#### 复杂的条件数组验证
16641663
 
17191718       'photos.profile' => 'required|image',
17201719   ]);
17211720
1722 
1723 
 1721
 1722
17241723您还可以验证数组的每个元素。 例如,要验证给定数组输入字段中的每封电子邮件是否唯一,您可以执行以下操作:
17251724
17261725   $validator = Validator::make($request->all(), [
 
17831782   // 至少需要一个符号...
17841783   Password::min(8)->symbols()
17851784
1786 
1787 
 1785
 1786
17881787此外,您可以使用 `uncompromised` 方法确保密码没有在公共密码数据泄露事件中被泄露:
17891788
17901789   Password::min(8)->uncompromised()
 
18341833
18351834   'password' => ['required', Password::defaults()],
18361835
1837 
1838 
 1836
 1837
18391838有时,您可能希望将其他验证规则附加到默认密码验证规则。 您可以使用 `rules` 方法来完成此操作:
18401839
18411840   use App\Rules\ZxcvbnRule;
 
18911890       }
18921891   }
18931892
1894 
1895 
 1893
 1894
18961895如果您想从翻译文件中返回错误消息,您可以从您的 `message` 方法中调用 `trans` 助手:
18971896
18981897   /**
 
19151914
19161915#### 访问附加数据
19171916
1918 如果您的自定义验证规则类需要访问所有其他正在验证的数据,您的规则类可以实现 `Illuminate\Contracts\Validation\DataAwareRule` 接口。 这个接口需要你的类定义一个 `setData` 方法。 Laravel 将自动调用此方法(在验证进行之前),所有数据都在验证中
 1917如果您的自定义验证规则类需要访问所有其他正在验证的数据,您的规则类可以实现 `Illuminate\Contracts\Validation\DataAwareRule` 接口。 这个接口需要你的类定义一个 `setData` 方法。 Laravel 将自动调用此方法(在验证进行之前),`$data` 包含所有即将验证的数据
19191918
19201919   <?php
19211920
 
19271926   class Uppercase implements Rule, DataAwareRule
19281927   {
19291928       /**
1930         * 所有数据都在验证中。
 1929        * 即将进行验证的所有数据
19311930        *
19321931        * @var array
19331932        */
 
19361935       // ...
19371936
19381937       /**
1939         * 设置验证下的数据。
 1938        * 设置即将进行验证的所有数据。
19401939        *
19411940        * @param array $data
19421941        * @return $this
 
19841983   }
19851984
19861985<a name="using-closures"></a>
1987 
1988 
 1986
 1987
19891988### 使用闭包
19901989
19911990如果您在整个应用程序中只需要一次自定义规则的功能,您可以使用闭包而不是规则对象。 闭包接收属性的名称、属性的值和一个在验证失败时应该调用的 `$fail` 回调:
 
20262025```
20272026
20282027> 注意:“隐式”规则仅_implicit_该属性是必需的。 它是否实际上使缺失或空属性无效取决于您。
 2028  
20292029
2030