多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## laravel 自定义验证消息 ### 自定义错误消息 你可以通过重写表单请求的`messages`方法来自定义错误消息。此方法应返回属性 / 规则对及其对应错误消息的数组:. ~~~php /** * 获取已定义验证规则的错误消息 * * @return array */ public function messages() { return [ 'title.required' => 'A title is required', 'body.required' => 'A message is required', ]; } ~~~ ### 自定义验证属性 如果你希望将验证消息的`:attribute`部分替换为自定义属性名称,则可以重写`attributes`方法来指定自定义名称。此方法应返回属性 / 名称对的数组: ~~~php /** * 获取验证错误的自定义属性 * * @return array */ public function attributes() { return [ 'email' => 'email address', ]; } ~~~ ### 准备验证输入 如果您需要在应用验证规则前清除请求中的任何数据,您可以使用`prepareForValidation`方法: ~~~php use Illuminate\Support\Str; /** * 准备验证数据 * * @return void */ protected function prepareForValidation() { $this->merge([ 'slug' => Str::slug($this->slug), ]); } ~~~ ## 处理错误信息 通过`Validator`实例调用`errors`方法,它会返回一个`Illuminate\Support\MessageBag`实例,该实例包含了各种可以很方便地处理错误信息的方法。并自动给所有视图提供`$errors`变量,也是`MessageBag`类的一个实例。 #### 检索特定字段的第一个错误信息 您可以使用`first`方法检索给定字段的第一个错误信息: ~~~php $errors = $validator->errors(); echo $errors->first('email'); ~~~ #### 检索特定字段的所有错误信息 您可以使用`get`方法检索给定字段所有信息的数组: ~~~php foreach ($errors->get('email') as $message) { // } ~~~ 如果要验证表单的数组字段,您可以使用`*`字符来获取每一个数组元素的所有错误信息: ~~~php foreach ($errors->get('attachments.*') as $message) { // } ~~~ #### 检索所有字段的所有错误信息 您可以使用`all`方法获取所有字段的所有错误信息的数组: ~~~php foreach ($errors->all() as $message) { // } ~~~ #### 判断特定字段是否含有错误信息 `has`方法可用于判断给定字段是否包含任何错误信息: ~~~php if ($errors->has('email')) { // } ~~~ ### 自定义错误信息 如果有需要,您可以使用自定义的错误信息来替换默认的错误信息。有几种方法可以指定自定义错误信息。首先,您可以将自定义信息作为`Validator::make`方法的第三个参数: ~~~php $messages = [ 'required' => 'The :attribute field is required.', ]; $validator = Validator::make($input, $rules, $messages); ~~~ 在该例中,`:attribute`占位符将被验证字段的实际名称替换。您亦可在验证消息中使用其他占位符。例如: ~~~php $messages = [ 'same' => 'The :attribute and :other must match.', 'size' => 'The :attribute must be exactly :size.', 'between' => 'The :attribute value :input is not between :min - :max.', 'in' => 'The :attribute must be one of the following types: :values', ]; ~~~ #### 为给定的属性自定义信息 有时,您可能只想为特定字段指定自定义错误信息。您可以属性名称后使用「点」标记来实现。例如: ~~~php $messages = [ 'email.required' => 'We need to know your e-mail address!', ]; ~~~ #### 在语言文件中自定义信息 在大多数情况下,您可能选择在语言文件中指定自定义信息,而不是将其传递给`Validator`。您可以在`resources/lang/xx/validation.php`语言文件中的`attributes`数组指定自定义信息来实现: ~~~php 'custom' => [ 'email' => [ 'required' => 'We need to know your e-mail address!', ], ], ~~~ #### 指定自定义属性值 如果您想要将错误信息中的`:attribute`部分替换为自定义的属性名称,您可以在`resources/lang/xx/validation.php`语言文件中的`attributes`属性数组中指定自定义名称以实现: ~~~php 'attributes' => [ 'email' => 'email address', ], ~~~ 您亦可通过将自定义属性作为`Validator::make`的第四个参数传递给它来实现: ~~~php $customAttributes = [ 'email' => 'email address', ]; $validator = Validator::make($input, $rules, $messages, $customAttributes); ~~~ #### 在语言文件中指定自定义值 有时,您可能需要将错误信息中的`:value`部分替换为自定义的表示形式。例如,下方规则中将`cc`指定为`payment_type`的值: ~~~php $request->validate([ 'credit_card_number' => 'required_if:payment_type,cc' ]); ~~~ 如果规则校验失败,它将生成如下的错误信息: ~~~php The credit card number field is required when payment type is cc. ~~~ 要将 payment type 显示的`cc`替换为自定义的显示形式,您可以通过在`validation`语言文件中定义`values`数组来实现之: ~~~php 'values' => [ 'payment_type' => [ 'cc' => 'credit card' ], ], ~~~ 现在,如果规则校验失败,将生成如下的错误信息: ~~~php The credit card number field is required when payment type is credit card. ~~~