playmaker 2年前

修改理由:

语法

相关信息:


此投稿由 MArtian 2年前 合并。

标题修改:

+ 表单验证

内容修改:

红色背景 为原始内容

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

OldNewDifferences
122122   }
123123
124124如您所见,验证规则被传递到 `validate` 方法中。不用担心 - 所有可用的验证规则均已[记录在案](#available-validation-rules)。另外再提醒一次,如果验证失败,会自动生成一个对应的响应。如果验证通过,那我们的控制器会继续正常运行。
125 或者,验证规则可以使用数组而不是单个 | 分隔的字符串:
 125或者,验证规则可以使用数组而不是单个 `|` 分隔的字符串:
126126
127127   $validatedData = $request->validate([
128128       'title' => ['required', 'unique:posts', 'max:255'],
 
154154<a name="a-note-on-nested-attributes"></a>
155155#### 嵌套字段的说明
156156
157 如果你的 HTTP 请求包含「嵌套」参数, 你可以在验证规则中使用「点」语法来指定这些参数:
 157如果你的 HTTP 请求包含「嵌套」参数,你可以在验证规则中使用 `.` 语法来指定这些参数:
158158
159159   $request->validate([
160160       'title' => 'required|unique:posts|max:255',
 
162162       'author.description' => 'required',
163163   ]);
164164
165 另外,如果你的字段名称包含点,则可以通过使用反斜杠将点转义,以防止将其解释为「点」语法:
 165另外,如果你的字段名称包含点,则可以通过使用反斜杠将点转义,以防止将其解释为 `.` 语法:
166166
167167   $request->validate([
168168       'title' => 'required|unique:posts|max:255',
 
203203
204204Laravel 的内置验证规则每个都有一条错误消息,位于应用程序的 `lang/en/validation.php` 文件中。在此文件中,你将找到每个验证规则的翻译条目。你可以根据应用程序的需求随意更改或修改这些消息。
205205
206 此外,你可以将此文件复制到另一个翻译语言的目录中,以翻译应用程序语言的消息。要了解有关 Laravel 本地化的更多信息,请查看完整的 [本地化文档](/docs/laravel/9.x/localization) 
 206此外,你可以将此文件复制到另一个翻译语言的目录中,以翻译应用程序语言的消息。要了解有关 Laravel 本地化的更多信息,请查看完整的 [本地化文档](/docs/laravel/9.x/localization)
207207
208208<a name="quick-xhr-requests-and-validation"></a>
209209#### XHR 请求 & 验证
210210
211 在如下示例中,我们使用传统形式将数据发送到应用程序。但是,许多应用程序从 JavaScript 驱动的前端接收 XHR 请求。在 XHR 请求期间使用 `validate` 方法时,Laravel 将不会生成重定向响应。相反,Laravel 会生成一个包含所有验证错误的 JSON 响应。该 JSON 响应将以 422 HTTP 状态码发送。
 211在如下示例中,我们使用传统形式将数据发送到应用程序。但是,许多应用程序从 JavaScript 驱动的前端接收 XHR 请求。在 XHR 请求期间使用 `validate` 方法时,Laravel 将不会生成重定向响应。相反,Laravel 会生成一个包含所有验证错误的 JSON 响应。该 JSON 响应将以 `422` HTTP 状态码发送。
212212
213213<a name="the-at-error-directive"></a>
214214#### `@error` 指令
 
241241<a name="repopulating-forms"></a>
242242### 回填表单
243243
244 当 Laravel 由于验证错误而生成重定向响应时,框架将自动 [将所有请求的输入闪存到 session 中](/docs/laravel/9.x/session#flash-data)。 这样做是为了方便你在下一个请求期间访问输入,并重新填充用户尝试提交的表单。
 244当 Laravel 由于验证错误而生成重定向响应时,框架将自动 [将所有请求的输入闪存到 session 中](/docs/laravel/9.x/session#flash-data)。这样做是为了方便你在下一个请求期间访问输入,并重新填充用户尝试提交的表单。
245245
246246要从先前的请求中检索闪存的输入,请在 `Illuminate\Http\Request` 的实例上调用 `old` 方法。 `old` 方法将从 [session](/docs/laravel/9.x/session) 中提取先前闪存的输入数据:
247247
 
359359<a name="customizing-the-redirect-location"></a>
360360#### 自定义重定向
361361
362 如前所述,当表单请求验证失败时,将会生成一个让用户返回到先前位置的重定向响应。 当然,您也可以自由定义此行为。 如果您要这样做,可以在表单请求中定义一个 `$redirect` 属性:
 362如前所述,当表单请求验证失败时,将会生成一个让用户返回到先前位置的重定向响应。当然,您也可以自由定义此行为。如果您要这样做,可以在表单请求中定义一个 `$redirect` 属性:
363363
364364   /**
365365    * 如果验证失败,用户应重定向到的 URI。
 
549549       'body' => 'required',
550550   ])->validate();
551551
552 You may use the `validateWithBag` method to store the error messages in a [named error bag](#named-error-bags) if validation fails:  
553552如果校验失败,您可以使用 `validateWithBag` 方法将错误信息存储到 [命名错误包](#named-error-bags) 中
554553
555554   Validator::make($request->all(), [
 
593592<a name="specifying-a-custom-message-for-a-given-attribute"></a>
594593#### 为给定属性指定自定义消息
595594
596 有时您可能希望只为特定属性指定自定义错误消息。您可以使用「点」表示法。首先指定属性名称,然后指定规则:
 595有时您可能希望只为特定属性指定自定义错误消息。您可以使用 `.` 表示法。首先指定属性名称,然后指定规则:
597596
598597   $messages = [
599598       'email.required' => 'We need to know your email address!',
 
908907<a name="rule-after-or-equal"></a>
909908#### after\_or\_equal:_date_
910909
911 待验证字段的值对应的日期必须在给定日期之后或与给定的日期相同。可参阅 [after](#rule-after) 规则获取更多信息。
 910待验证字段的值对应的日期必须在给定日期之后或与给定的日期相同。可参阅 [after](#rule-after) 规则获取更多信息。
912911
913912<a name="rule-alpha"></a>
914913#### alpha
915914
916 待验证字段只能由字母组成。
 915待验证字段只能由字母组成。
917916
918917<a name="rule-alpha-dash"></a>
919918#### alpha_dash
 
932931
933932待验证字段必须是有效的 PHP 数组。
934933
935 当向 `array` 规则提供附加值时,输入数组中的每个键都必须出现在提供给规则的值列表中。 在以下示例中,输入数组中的 `admin` 键无效,因为它不包含在提供给 `array` 规则的值列表中:
 934当向 `array` 规则提供附加值时,输入数组中的每个键都必须出现在提供给规则的值列表中。在以下示例中,输入数组中的 `admin` 键无效,因为它不包含在提供给 `array` 规则的值列表中:
936935
937936   use Illuminate\Support\Facades\Validator;
938937
 
953952<a name="rule-bail"></a>
954953#### bail
955954
956 在首次验证失败后立即终止验证。
 955在首次验证失败后立即终止验证。
957956
958957虽然 `bail` 规则只会在遇到验证失败时停止验证特定字段,但 `stopOnFirstFailure` 方法会通知验证器,一旦发生单个验证失败,它应该停止验证所有属性:
959958
 
976975<a name="rule-between"></a>
977976#### between:_min_,_max_
978977
979 验证字段的大小必须在给定的 min 和 max 之间。字符串、数字、数组和文件的计算方式都使用 [`size`](#rule-size) 方法。
 978验证字段的大小必须在给定的 min 和 max 之间。字符串、数字、数组和文件的计算方式都使用 [`size`](#rule-size) 方法。
980979
981980<a name="rule-boolean"></a>
982981#### boolean
983982
984 验证的字段必须可以转换为 Boolean 类型。 可接受的输入为 `true`, `false`, `1`, `0`, `"1"`, 和 `"0"`.
 983验证的字段必须可以转换为 Boolean 类型。 可接受的输入为 `true`, `false`, `1`, `0`, `"1"`, 和 `"0"`
985984
986985<a name="rule-confirmed"></a>
987986#### confirmed
 
10031002<a name="rule-date-equals"></a>
10041003#### date_equals:_date_
10051004
1006 验证字段必须等于给定日期。日期将传递到 PHP `strtotime` 函数中,以便转换为有效的 `DateTime` 实例。
 1005验证字段必须等于给定日期。日期将传递到 PHP `strtotime` 函数中,以便转换为有效的 `DateTime` 实例。
10071006
10081007<a name="rule-date-format"></a>
10091008
 
10671066<a name="rule-distinct"></a>
10681067#### distinct
10691068
1070 验证数组时,指定的字段不能有任何重复值:
 1069验证数组时,指定的字段不能有任何重复值
10711070
10721071   'foo.*.id' => 'distinct'
10731072
1074 Distinct 默认使用松散的变量比较。要使用严格比较,您可以将`strict`参数添加到验证规则定义中:
 1073Distinct 默认使用松散的变量比较。要使用严格比较,您可以将`strict`参数添加到验证规则定义中
10751074
10761075   'foo.*.id' => 'distinct:strict'
10771076
1078 你可以在验证规则的参数中添加 `ignore_case` ,以使规则忽略大小写差异::
 1077你可以在验证规则的参数中添加 `ignore_case` ,以使规则忽略大小写差异:
10791078
10801079   'foo.*.id' => 'distinct:ignore_case'
10811080
10821081<a name="rule-email"></a>
10831082#### email
10841083
1085 验证的字段必须符合 `e-mail` 地址格式。当前版本,此种验证规则由[`egulias/email-validator`](https://github.com/egulias/EmailValidator) 提供支持。默认情况下,使用 `RFCValidation` 验证样式,但你也可以应用其他验证样式:
 1084验证的字段必须符合 `e-mail` 地址格式。当前版本,此种验证规则由[`egulias/email-validator`](https://github.com/egulias/EmailValidator) 提供支持。默认情况下,使用 `RFCValidation` 验证样式,但你也可以应用其他验证样式
10861085
10871086   'email' => 'email:rfc,dns'
10881087
1089 上面的示例将应用 `RFCValidation` 和 `DNSCheckValidation` 验证。以下是你可以应用的验证样式的完整列表:
 1088上面的示例将应用 `RFCValidation` 和 `DNSCheckValidation` 验证。以下是你可以应用的验证样式的完整列表
10901089
10911090<div class="content-list" markdown="1">
10921091
 
11101109<a name="rule-enum"></a>
11111110#### enum
11121111
1113 `Enum` 规则是一个基于类的规则,验证指定的字段是否包含一个有效的枚举值。`Enum` 规则接受枚举的名称作为其唯一的构造函数参数:
 1112`Enum` 规则是一个基于类的规则,验证指定的字段是否包含一个有效的枚举值。`Enum` 规则接受枚举的名称作为其唯一的构造函数参数
11141113
11151114   use App\Enums\ServerStatus;
11161115   use Illuminate\Validation\Rules\Enum;
 
11191118       'status' => [new Enum(ServerStatus::class)],
11201119   ]);
11211120
1122 > 注意:枚举仅适用于PHP 8.1+.
 1121> 注意:枚举仅适用于PHP 8.1+
11231122
11241123
11251124
 
11721171
11731172   'user_id' => 'exists:App\Models\User,id'
11741173
1175 如果你想要自定义一个执行查询的验证规则,你可以使用`Rule`类去流畅地定义规则。在这个例子中,我们也将指定验证规则为一个数组,而不再是使用`|`分割他们:
 1174如果你想要自定义一个执行查询的验证规则,你可以使用 `Rule` 类去流畅地定义规则。在这个例子中,我们也将指定验证规则为一个数组,而不再是使用 `|` 分割他们:
11761175
11771176   use Illuminate\Support\Facades\Validator;
11781177   use Illuminate\Validation\Rule;
 
12151214<a name="rule-in"></a>
12161215#### in:_foo_,_bar_,...
12171216
1218 验证中的字段必须包含在给定的值列表中。 由于此规则通常需要您对数组进行“内爆”,因此可以使用“Rule::in”方法来流畅地构造规则:
 1217验证字段必须包含在给定的值列表中。由于此规则通常要求你 `implode` 数组,因此可以使用`Rule::in` 方法来流畅地构造规则:
12191218
12201219   use Illuminate\Support\Facades\Validator;
12211220   use Illuminate\Validation\Rule;
 
12271226       ],
12281227   ]);
12291228
1230 当 `in` 规则与 `array` 规则结合使用时,输入数组中的每个值都必须出现在提供给 `in` 规则的值列表中。 在以下示例中,输入数组中的“LAS”机场代码无效,因为它不包含在提供给“in”规则的机场列表中:
 1229当 `in` 规则与 `array` 规则结合使用时,输入数组中的每个值都必须出现在提供给 `in` 规则的值列表中。 在以下示例中,输入数组中的「LAS」机场代码无效,因为它不包含在提供给 `in` 规则的机场列表中:
12311230
12321231   use Illuminate\Support\Facades\Validator;
12331232   use Illuminate\Validation\Rule;
 
12541253
12551254验证字段必须是整数。
12561255
1257 > 注意:此验证规则不会验证输入是否为“整数”变量类型,仅验证输入是否为 PHP 的“FILTER_VALIDATE_INT”规则所接受的类型。 如果您需要将输入验证为数字,请将此规则与 [`numeric` 验证规则](#rule-numeric) 结合使用。
 1256> 注意:此验证规则不会验证输入是否为“整数”变量类型,仅验证输入是否为 PHP 的 `FILTER_VALIDATE_INT` 规则所接受的类型。 如果您需要将输入验证为数字,请将此规则与 [`numeric` 验证规则](#rule-numeric) 结合使用。
12581257
12591258<a name="rule-ip"></a>
12601259#### ip
 
12911290<a name="rule-lte"></a>
12921291#### lte:_field_
12931292
1294 验证中的字段必须小于或等于给定的 字段 。这两个字段必须是相同的类型。字符串、数值、数组和文件大小的计算方式与 [`size`](#rule-size) 方法进行评估。
 1293验证中的字段必须小于或等于给定的字段 。这两个字段必须是相同的类型。字符串、数值、数组和文件大小的计算方式与 [`size`](#rule-size) 方法进行评估。
12951294
12961295<a name="rule-max"></a>
12971296#### max:_value_
 
13261325<a name="rule-min"></a>
13271326#### min:_value_
13281327
1329 验证字段必须具有最小值 _value_ 。 字符串,数值,数组,文件大小的计算方式都与 [`size`](#rule-size) 规则一致。
 1328验证字段必须具有最小值 _value_ 。字符串,数值,数组,文件大小的计算方式都与 [`size`](#rule-size) 规则一致。
13301329
13311330<a name="multiple-of"></a>
13321331#### multiple_of:_value_
 
13541353
13551354验证字段必须与给定的正则表达式不匹配。
13561355
1357 验证时,这个规则使用 PHP `preg_match` 函数。指定的模式应遵循 `preg_match` 所需的相同格式,也包括有效的分隔符。 例如: `'email' => 'not_regex:/^.+$/i'`.
 1356验证时,这个规则使用 PHP `preg_match` 函数。指定的模式应遵循 `preg_match` 所需的相同格式,也包括有效的分隔符。 例如: `'email' => 'not_regex:/^.+$/i'`
13581357
13591358> 注意:当使用 `regex` / `not_regex` 模式时, 可能需要在数组中指定规则,而不是使用 `|` 分隔符 ,特别是在正则表达式包含 `|` 字符 的情况下。
13601359
 
13631362<a name="rule-nullable"></a>
13641363#### nullable
13651364
1366 验证字段可以为 `null`。
 1365验证字段可以为 `null`。
13671366
13681367<a name="rule-numeric"></a>
13691368#### numeric
 
14161415<a name="rule-required"></a>
14171416#### required
14181417
1419 验证中的字段必须存在于输入数据中,并且不能为空。 如果以下条件之一为真,则字段被视为“空”
 1418验证中的字段必须存在于输入数据中,并且不能为空。如果以下条件之一为真,则字段被视为「空」
14201419
14211420<div class="content-list" markdown="1">
14221421
1423 - 值为“null”
 1422- 值为 `null`
14241423- 该值为空字符串。
14251424- 该值是一个空数组或空的 `Countable` 对象。
14261425- 该值是一个没有路径的上传文件。
 
14871486<a name="rule-size"></a>
14881487#### size:_value_
14891488
1490 验证字段的大小必须与给定的_value_匹配。 对于字符串数据,_value_ 对应于字符数。 对于数字数据,_value_ 对应于给定的整数值(属性还必须具有 `numeric` 或 `integer` 规则)。 对于数组,_size_ 对应于数组的 `count`。 对于文件,_size_ 对应于以千字节为单位的文件大小。 让我们看一些例子:
 1489验证字段的大小必须与给定的_value_匹配。对于字符串数据,_value_ 对应于字符数。 对于数字数据,_value_ 对应于给定的整数值(属性还必须具有 `numeric` 或 `integer` 规则)。 对于数组,_size_ 对应于数组的 `count`。 对于文件,_size_ 对应于以千字节为单位的文件大小。 让我们看一些例子:
14911490
14921491   // 验证一个字符串是否正好是 12 个字符长...
14931492   'title' => 'size:12';
 
15571556       ],
15581557   ]);
15591558
1560 > 注意:你不应该将任何用户控制的请求输入传递给 `ignore` 方法。 相反,您应该只传递系统生成的唯一 ID,例如来自 Eloquent 模型实例的自动递增 ID 或 UUID。 否则,您的应用程序将容易受到 SQL 注入攻击。
 1559> 注意:你不应该将任何用户控制的请求输入传递给 `ignore` 方法。相反,您应该只传递系统生成的唯一 ID,例如来自 Eloquent 模型实例的自动递增 ID 或 UUID。否则,您的应用程序将容易受到 SQL 注入攻击。
15611560
15621561除了将模型键的值传递给 `ignore` 方法,您还可以传递整个模型实例。 Laravel 会自动从模型中提取密钥:
15631562
 
15671566
15681567   Rule::unique('users')->ignore($user->id, 'user_id')
15691568
1570 默认情况下,`unique` 规则将检查与正在验证的属性名称匹配的列的唯一性。 但是,您可以将不同的列名作为第二个参数传递给 `unique` 方法:
 1569默认情况下,`unique` 规则将检查与正在验证的属性名称匹配的列的唯一性。但是,您可以将不同的列名作为第二个参数传递给 `unique` 方法:
15711570
15721571   Rule::unique('users', 'email_address')->ignore($user->id),
15731572
15741573**添加额外的 Where 子句:**
15751574
1576 您可以通过使用 `where` 方法自定义查询来指定其他查询条件。 例如,让我们添加一个查询条件,将查询范围限定为仅搜索“account_id”列值为“1”的记录:
 1575您可以通过使用 `where` 方法自定义查询来指定其他查询条件。例如,让我们添加一个查询条件,将查询范围限定为仅搜索 `account_id` 列值为 `1` 的记录:
15771576
15781577   'email' => Rule::unique('users')->where(function ($query) {
15791578       return $query->where('account_id', 1);
 
16331632<a name="complex-conditional-validation"></a>
16341633#### 复杂的条件验证
16351634
1636 有时您可能希望基于更复杂的条件逻辑添加验证规则。 例如,您可能希望仅当另一个字段的值大于 100 时才需要给定字段。或者,您可能需要两个字段才能仅在另一个字段存在时才具有给定值。 添加这些验证规则并不一定很痛苦。 首先,使用您的_静态规则_创建一个永远不会改变的 `Validator` 实例:
 1635有时您可能希望基于更复杂的条件逻辑添加验证规则。例如,您可能希望仅当另一个字段的值大于 100 时才需要给定字段。或者,您可能需要两个字段才能仅在另一个字段存在时才具有给定值。 添加这些验证规则并不一定很痛苦。首先,使用您的_静态规则_创建一个永远不会改变的 `Validator` 实例:
16371636
16381637   use Illuminate\Support\Facades\Validator;
16391638
 
16421641       'games' => 'required|numeric',
16431642   ]);
16441643
1645 假设我们的 Web 应用程序是面向游戏收藏家的。 如果游戏收藏家在我们的应用程序中注册并且他们拥有超过 100 款游戏,我们希望他们解释为什么他们拥有这么多游戏。 例如,他们可能经营一家游戏转售店,或者他们只是喜欢收集游戏。 要有条件地添加此要求,我们可以在 `Validator` 实例上使用 `sometimes` 方法。
 1644假设我们的 Web 应用程序是面向游戏收藏家的。如果游戏收藏家在我们的应用程序中注册并且他们拥有超过 100 款游戏,我们希望他们解释为什么他们拥有这么多游戏。 例如,他们可能经营一家游戏转售店,或者他们只是喜欢收集游戏。要有条件地添加此要求,我们可以在 `Validator` 实例上使用 `sometimes` 方法。
16461645
16471646   $validator->sometimes('reason', 'required|max:500', function ($input) {
16481647       return $input->games >= 100;
 
16611660<a name="complex-conditional-array-validation"></a>
16621661#### 复杂的条件数组验证
16631662
1664 有时您可能希望根据同一嵌套数组中的另一个字段来验证一个字段,该数组的索引您不知道。 在这些情况下,您可以允许您的闭包接收第二个参数,该参数将是正在验证的数组中的当前单个项目:
 1663有时您可能希望根据同一嵌套数组中的另一个字段来验证一个字段,该数组的索引您不知道。在这些情况下,您可以允许您的闭包接收第二个参数,该参数将是正在验证的数组中的当前单个项目:
16651664
16661665   $input = [
16671666       'channels' => [
 
16841683       return $item->type !== 'email';
16851684   });
16861685
1687 与传递给闭包的 `$input` 参数一样,当属性数据是数组时,`$item` 参数是 `Illuminate\Support\Fluent` 的实例; 否则,它是一个字符串。
 1686与传递给闭包的 `$input` 参数一样,当属性数据是数组时,`$item` 参数是 `Illuminate\Support\Fluent` 的实例;否则,它是一个字符串。
16881687
16891688<a name="validating-arrays"></a>
16901689## 验证数组
16911690
1692 正如 [`array` 验证规则文档](#rule-array) 中所讨论的,`array` 规则接受允许的数组键列表。 如果数组中存在任何其他键,则验证将失败:
 1691正如 [`array` 验证规则文档](#rule-array) 中所讨论的,`array` 规则接受允许的数组键列表。如果数组中存在任何其他键,则验证将失败:
16931692
16941693   use Illuminate\Support\Facades\Validator;
16951694
 
17051704       'user' => 'array:username,locale',
17061705   ]);
17071706
1708 通常,您应该始终指定允许出现在数组中的数组键。 否则,验证器的 `validate` 和 `validated` 方法将返回所有经过验证的数据,包括数组及其所有键,即使这些键没有被其他嵌套数组验证规则验证。
 1707通常,您应该始终指定允许出现在数组中的数组键。否则,验证器的 `validate` 和 `validated` 方法将返回所有经过验证的数据,包括数组及其所有键,即使这些键没有被其他嵌套数组验证规则验证。
17091708
17101709<a name="validating-nested-array-input"></a>
17111710### 验证嵌套数组输入
 
17201719
17211720
17221721
1723 您还可以验证数组的每个元素。 例如,要验证给定数组输入字段中的每封电子邮件是否唯一,您可以执行以下操作:
 1722您还可以验证数组的每个元素。例如,要验证给定数组输入字段中的每封电子邮件是否唯一,您可以执行以下操作:
17241723
17251724   $validator = Validator::make($request->all(), [
17261725       'person.*.email' => 'email|unique:users',
 
17381737<a name="accessing-nested-array-data"></a>
17391738#### 访问嵌套数组数据
17401739
1741 有时,在为属性分配验证规则时,您可能需要访问给定嵌套数组元素的值。 您可以使用 `Rule::foreEach` 方法完成此操作。 `forEach` 方法接受一个闭包,该闭包将为验证中的数组属性的每次迭代调用,并将接收属性的值和显式的、完全扩展的属性名称。 闭包应该返回一个规则数组来分配给数组元素:
 1740有时,在为属性分配验证规则时,您可能需要访问给定嵌套数组元素的值。您可以使用 `Rule::foreEach` 方法完成此操作。 `forEach` 方法接受一个闭包,该闭包将为验证中的数组属性的每次迭代调用,并将接收属性的值和显式的、完全扩展的属性名称。闭包应该返回一个规则数组来分配给数组元素:
17421741
17431742   use App\Rules\HasPermission;
17441743   use Illuminate\Support\Facades\Validator;
 
17561755<a name="validating-passwords"></a>
17571756## 验证密码
17581757
1759 为确保密码具有足够的复杂性,您可以使用 Laravel 的“密码”规则对象:
 1758为确保密码具有足够的复杂性,您可以使用 Laravel 的 `password` 规则对象:
17601759
17611760   use Illuminate\Support\Facades\Validator;
17621761   use Illuminate\Validation\Rules\Password;
 
17901789
17911790在内部,`Password` 规则对象使用 [k-Anonymity](https://en.wikipedia.org/wiki/K-anonymity) 模型来确定密码是否已通过 [haveibeenpwned.com](https ://haveibeenpwned.com) 服务而不牺牲用户的隐私或安全。
17921791
1793 默认情况下,如果密码在数据泄露中至少出现一次,则会被视为已泄露。 您可以使用 `uncompromised` 方法的第一个参数自定义此阈值:
 1792默认情况下,如果密码在数据泄露中至少出现一次,则会被视为已泄露。您可以使用 `uncompromised` 方法的第一个参数自定义此阈值:
17941793
17951794   // 确保密码在同一数据泄露中出现少于 3 次...
17961795   Password::min(8)->uncompromised(3);
 
19141913
19151914#### 访问附加数据
19161915
1917 如果您的自定义验证规则类需要访问所有其他正在验证的数据,您的规则类可以实现 `Illuminate\Contracts\Validation\DataAwareRule` 接口。 这个接口需要你的类定义一个 `setData` 方法。 Laravel 将自动调用此方法(在验证进行之前),`$data` 包含所有即将验证的数据:
 1916如果您的自定义验证规则类需要访问所有其他正在验证的数据,您的规则类可以实现 `Illuminate\Contracts\Validation\DataAwareRule` 接口。这个接口需要你的类定义一个 `setData` 方法。Laravel 将自动调用此方法(在验证进行之前),`$data` 包含所有即将验证的数据:
19181917
19191918   <?php
19201919
 
19871986
19881987### 使用闭包
19891988
1990 如果您在整个应用程序中只需要一次自定义规则的功能,您可以使用闭包而不是规则对象。 闭包接收属性的名称、属性的值和一个在验证失败时应该调用的 `$fail` 回调:
 1989如果您在整个应用程序中只需要一次自定义规则的功能,您可以使用闭包而不是规则对象。闭包接收属性的名称、属性的值和一个在验证失败时应该调用的 `$fail` 回调:
19911990
19921991   use Illuminate\Support\Facades\Validator;
19931992
 
20062005<a name="implicit-rules"></a>
20072006### 隐式规则
20082007
2009 默认情况下,当正在验证的属性不存在或包含空字符串时,不会运行正常的验证规则,包括自定义规则。 例如,[`unique`](#rule-unique) 规则不会针对空字符串运行:
 2008默认情况下,当正在验证的属性不存在或包含空字符串时,不会运行正常的验证规则,包括自定义规则。例如,[`unique`](#rule-unique) 规则不会针对空字符串运行:
20102009
20112010   use Illuminate\Support\Facades\Validator;
20122011
 
20162015
20172016   Validator::make($input, $rules)->passes(); // true
20182017
2019 要使自定义规则即使在属性为空时也能运行,该规则必须暗示该属性是必需的。 要创建“隐式”规则,请实现 Illuminate\Contracts\Validation\ImplicitRule 接口。 该接口用作验证器的“标记接口”; 因此,除了典型的“Rule”接口所需的方法之外,它不包含您需要实现的任何其他方法。
 2018要使自定义规则即使在属性为空时也能运行,该规则必须暗示该属性是必需的。要创建「隐式」规则,请实现 Illuminate\Contracts\Validation\ImplicitRule 接口。 该接口用作验证器的「标识接口」;因此,除了典型的 `Rule` 接口所需的方法之外,它不包含您需要实现的任何其他方法。
20202019
20212020要生成新的隐式规则对象,您可以使用带有 `--implicit` 选项的 `make:rule` Artisan 命令:
20222021
 
20242023php artisan make:rule Uppercase --implicit
20252024```
20262025
2027 > 注意:“隐式”规则仅_implicit_该属性是必需的。 它是否实际上使缺失或空属性无效取决于您。
 2026> 注意:「隐式」规则仅_implicit_该属性是必需的。 它是否实际上使缺失或空属性无效取决于您。
20282027
20292028