laravel 基础教程 —— 验证

验证

简介

Laravel 对申明应用的输入数据提供了多中途径的兑现。默许的,Laravel
的底子控制器类使用了 ValidatesRequests
trait,该性状允许利用种种强大的辨证约束来验证 HTTP 的输入请求。

飞快入门

要询问 Laravel
强大的印证功效,我们需求一个全体的示范来叙述表单的表明,和将表单验证的错误音讯呈现给用户。

定义路由

首先,让我们只要大家在 app/Http/routes.php 文件中持有下述的路由:

// Display a form to create a blog post...
Route::get('post/create', 'PostController@create');

// Store a new blog post...
Route::post('post', 'PostController@store');

当然, GET 路由会为用户创制一个新的博客小说时提供一个表单,而 POST
路由会储存新的博客小说到数据库。

创设控制器

随即,大家要求一个控制器来拍卖这么些路由,近期,大家先不在 store
方法里废弃何的逻辑:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class PostController extends Controller
{
  /**
   * Show the form to create a new blog post.
   *
   * @return Response
   */
   public function create()
   {
     return view('post.create');
   }

   /**
    * Store a new blog post.
    *
    * @param Request $request
    * @return Response
    */
    public function store(Request $request)
    {
      // Validate and store the blog post...
    }
}

编排验证逻辑

如今大家准备好了在 store
方法中举办博客小说的辨证逻辑。假若您检查拔取的基本功控制器(App\Http\Controllers\Controller)
类,你会发现此类应用了 ValidatesRequests
trait。那些特点为所有的控制器提供了方便的 validate 方法。

validate 方法接收 HTTP
输入请求,并安装验证约束。如若讲明约束通过,那么继续的代码将会健康的执行。即使声明战败,那么将会抛出一个适宜的不行响应再次来到给用户。对于价值观的
HTTP 请求,验证器会自动生成一个重定向响应,而 AJAX 请求,则会回去 JSON
响应。

为了可以更好的敞亮 validate 方法,让大家后续回到 store 方法:

/**
 * Store a new blog post.
 *
 * @param Request $request
 * @return Response
 */
 public function store(Request $request)
 {
   $this->validate($request, [
     'title' => 'required|unique:posts|max:255',
     'body' => 'required',
   ]);

   // The blog post is valid, store in database...
 }

如同您所见到的,大家简要的传递了一个 HTTP 输入请求,并且在 validate
方法中装置了预期的印证约束。而本次,若是阐明失败,那么相应的响应会被电动的变型并且被再次回到给请求用户。假诺阐明通过,那么大家的控制器会继续执行之后的事情。

在初次验证失利时停下

有时候你期望在收获第三个表明约束败北时停下当前品质其他约束的求证。你可以在质量中投入
bail 约束:

$this->validate($request, [
  'title' => 'bail|required|unique:posts|max:255',
  'body' => 'required',
]);

在那些例子中,倘诺 title 属性中的 required 约束验证战败,那么
unique 约束就不会再被认证。约束是坚守其被分配的依次来举行表明的。

嵌套的特性

尽管你的 HTTP 请求包括了嵌套的参数,你可以行使 . 语法来为其指定约束:

$this->validate($request, [
  'title' => 'required|unique:posts|max:255',
  'author.name' => 'required',
  'author.description' => 'required',
]);

来得验证错误

那么,假使传入的哀求参数并从未经过给定约束的辨证怎么做?似乎前方所提到的,Laravel
会自动的重定向用户到前边的义务。此外,所有的注解错误音讯都会被自动的闪存到
session 中。

您须求专注到大家并没有强烈的绑定错误音讯到 GET
路由的响应视图里。那是因为 laravel 会检查闪存 seesion
里的不当数据,并且会自行的在其可用时注入到视图中。你可以在视图中接纳
$errors 变量,它是一个 Illuminate\Support\MessageBag
实例。若是急需明白越多那个实例对象,请参见其
文档

注意:$errors 变量是经过
Illuminate\View\Middleware\ShareErrorsFromSession
中间件来绑定到视图中的。这么些中间件已经被提供到了 web
中间件组中。这么些中间件被应用时会自主的在你的视图中流入 $errors
变量,那允许你方便的只要 $errors
变量总是已经被定义且可以高枕无忧的运用。

故此,在大家的例子中,当验证败北是,用户将会被重定向到控制器的 create
方法中,那允许你在视图中浮现错误音信:

<!-- /resources/views/post/create.blade.php -->

<h1>Create Post</h1>

@if (count($errors) > 0)
  <div class="alert alert-danger">
    <ul>
      @foreach ($errors->all() as $error)
        <li>{{ $error }}</li>
      @endforeach
    </ul>
  </div>
@endif

<!-- Create Post Form -->

自定义闪存错误格式

比方你希望在注明败北时得以自定义闪存进 session
中的错误新闻的格式,你须求在你的根底控制器中复写
formatValidationErrors 方法。不要遗忘在顶部引入
Illuminate\Contracts\Validation\Validator 类:

<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;

abstract class Controller extends BaseController
{
  use DispatchesJobs, ValidatesRequests;

  /**
   * {@inheritdoc}
   */
   protected function formatValidationErrors(Validator $validator)
   {
     return $validator->errors()->all();
   }
}

AJAX 请求 & 验证

在地方的示范中,大家利用传统的表单来发送数据到使用,事实上,近日无数采用都施用
AJAX 请求,当通过 AJAX 请求来选择 validate 方法时,laravel
并不会自动生成重定向的响应,相反的,laravel
会生成一个包含了评释错误新闻的 JSON 响应。并且该响应会伴随 422 HTTP
状态码。

注解数组

评释数组情势的输入并不是一件痛楚的工作。比如,去验证给定的输入数组中保有的邮件都应有是绝无仅有的,你可以参见如下做法:

$validator = Validator::make($request->all(), [
  'person.*.email' => 'email|unique:users',
  'person.*.first_name' => 'required_with:person.*.last_name',
]);

一律的,你也可以在选择语言文件来指定特定的表达音信时选取 *
通配符。那足以简单的拔取单条验证新闻提要求基于数组的输入:

'custom' => [
  'person.*.email' => [
    'unique' => 'Each person must have a unique e-mail address',
  ]
]

其余验证途径

手动的创立 Validators

一经您不爱好使用 ValidatesRequests trait 的 validator
方法,你也可以通过使用 Validator 假面来创立一个 validator
实例。Validator 假面的 make 方法就可以生成一个新的 validator 实例:

<?php

namespace App\Http\Controllers;

use Validator;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class PostController extends Controller
{
  /**
   * Store a new blog post.
   *
   * @param Request $request
   * @return Response
   */
   public function store(Request $request)
   {
     $validator = Validator::make($request->all(), [
       'title' => 'required|unique:posts|max:255',
       'body' => 'required',
     ]);

     if ($validator->fails()) {
       return redirect('post/create')
                ->withErrors($validator)
                ->withInput();
     }

     // Store the blog post...
   }
}

make
方法所承受的第三个参数是急需被认证的多寡,第四个参数则是应有施加到数码的证实约束。

比方请求的印证失利,那么你需求动用 withErrors 方法来讲错误新闻存放到
session 中。当使用该方式时,$errors
变量会在重定向之后被机关的共享到您的视图中,那使您可以轻松的将错误音信展示给用户。withErrors
方法可以收到 validator 实例,或者 MessageBag 实例,又或者原生的 PHP
array

被命名的错误袋

比方你在一个独自页面中隐含了多个表单。那么你可能会期待能对 MessageBag
举行命名以显示相应的表单错误。你能够直接在 withErrors
方法中传递首个参数对其进展命名:

return redirect('register')
         ->withErrors($validator, 'login');

您之后方可通过 $errors 变量来拜会被命名的 MessageBag 实例:

{{ $errors->login->first('email') }}

表明之后的 Hook

验证器也同意你在印证完毕之后执行一定的操作。那允许你轻松的进行进一步的证实,你也足以在音信集合里添加愈多的荒谬新闻。在验证器的实例上选用
after 方法来拓展 hook:

$validator = Validator::make(...);

$validator->after(function ($validator) {
  if ($this->somethingElseIsInvalid()) {
    $validator->errors()->ad('field', 'Something is wrong with this field!');
  } 
});

if ($validator->fails()) {
  //
}

表单请求验证

对于更为复杂的验证场景,你恐怕希望创设一个“表单请求”。表单请求是一个自定义的伏乞类,并且它包蕴了颇具的辨证逻辑。你可以动用
make:request Artisan CLI 命令来创建一个表单请求类:

php artisan make:request StoreBlogPostRequest

被转移的类会被贮存在 app/Http/Requests 目录。让大家在 rules
方法中来添加一些证实约束:

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
 public function rules()
 {
   return [
     'title' => 'required|unique:posts|max:255',
     'body' => 'required',
   ];
 }

那么,这几个验证约束是何许被裁判的?你所要做的有所的事务就是在您的控制器方法中添加该请求类的花色提醒。传入进来的表单请求会在控制器方法调用从前被活动的进行封锁验证,那表示你完全不需求再你的控制器方法中丰硕任何的证实逻辑:

/**
 * Store the incoming blog post.
 *
 * @param StoreBlogPostRequest $request
 * @return Response
 */
public function store(StoreBlogPostRequest $request)
{
  // The incoming request is valid...
}

要是证实失利,用户会被活动的重定向到他俩事先的职位。那么注明错误消息也会自动的闪存进
session 数据中被用于显示。要是你利用的是 AJAX
请求,那么会自行的回到一个包罗所有验证错误音讯的 JSON 格式的响应,它的
HTTP 状态码会被装置为 422。

授权表单请求

表单请求类也包括了 authorize
方法。在这么些措施中,你可以检查已证实的用户是不是真的具有修改所给定资源的权利。比如,倘使用户尝试修改博客小说中的评论新闻,大家必要考虑一下这些评价是属于她的吧:

/**
 * Determine if the user is authorized to make this request.
 *
 * @return bool
 */
 public function authorize()
 {
   $commentId = $this->route('comment');

   return Comment::where('id', $commentId)
            ->where('user_id', Auth::id())->exists();
 }

你应当专注到了上述实例中的 route
方法的调用。这么些方法用来在路由被访问时发放所定义的 URL
参数,比如下边路由的 {comment} 参数:

Route::post('comment/{comment}');

如果 authorize 方法重临 false,那么会响应一个 403
的状态码,并且控制器的主意不会被执行。

如果您安插在应用的其余一些来拍卖授权逻辑,你可以简简单单的在 authorize
方法中回到 true:

/**
 * Determine if the user is authorized to make this request.
 *
 * @return bool
 */
 public function authorize()
 {
   return true;
 }

自定义闪存的谬误格式

倘若您期望在证实战败时自定义闪存到 session
数据中验证错误音讯的格式,那么你必要复写(App\Http\Requests\Request)基础请求类中的
formatErros 方法。不要忘记引入
Illuminate\Contracts\Validation\Validator 类:

/**
 * {@inheritdoc}
 */
 protected function formatErrors(Validator $validator)
 {
   return $validator->errors()->all();
 }

自定义错误音信

您也得以透过在请求类中复写 messages
方法来自定义错误新闻。该办法应该回到一个暗含相应错误音讯的键值对数组:

/**
 * Get the error messages for the defined validation rules.
 *
 * @return array
 */
 public function message()
 {
   return [
     'title.required' => 'A title is required',
     'body.required' => 'A message is required',
   ];
 }

与不当音讯同盟

在调用 Validator 实例的 errors 方法之后,你可以搜索到一个
Illuminate\Support\MessageBag
的实例,那实例拥有多样便民的办法来与错误音信举办交互。

探寻给定字段中的第二个错误音讯

你可以接纳 first 方法来搜寻给定字段的第三个谬误消息:

$message = $validator->errors();

echo $message->first('email');

搜寻给定字段的持有错误音讯

假诺您要求寻找给定字段的装有新闻所构成的数组,那么您应有选用 get
方法:

foreach ($messages->get('email') as $message) {
  //
}

找寻所有字段的保有错误新闻

您可以接纳 all 方法来寻找所有字段的富有错误音讯所结合的数组:

foreach ($message->all() as $message) {
  //
}

看清所给定的字段中是还是不是存在音信

if ($messages->has('email')) {
  //
}

动用给定的格式来寻找获取错误新闻

echo $message->first('email', '<p>:message</p>');

使用给定的格式来搜寻所有的一无可取音讯

foreach ($messages->all('<li>:message</li>') as $message) {
  //
}

自定义错误新闻

比方您必要,你可以动用自定义的谬误音信来取代默许的认证信息。那里有两种方法来指定自定义的音信。首先,你可以传递自定的音信作为
Validator::make 方法的第多少个参数:

$messages = [
  'required' => 'The :attribute field is required.',
];

$validator = Validator::make($input, $rules, $messages);

在这么些例子中,:attribute
占位符会被注明数据中实际的称呼所替换。你还足以应用其余的占位符到验证信息中,比如:

$message = [
  'same' => 'The :attribute and :other must match.',
  'size' => 'The :attribute must be exactly :size.',
  'between' => 'The :attribute must be between :min - :max.',
  'in' => 'The :attribute must be one of the following types: :values',
];

为给定的特性指定错误消息

有时候,你恐怕希望指定自定义的错误音讯到特定的字段。你可以使用 .
符号来展开私分,属性名应该在前,约束应该在后:

$message = [
  'email.required' => 'We need to know your e-mail address!',
];

在言语文件中指定自定义信息

在大部情况下,你也许希望利用一个言语文件中的自定义新闻属性直接传送到
Validator。你可以在 resources/lang/xx/validation.php 语言文件中添加
custom 数组来存储你的信息:

'custom' => [
  'email' => [
    'required' => 'We need to know your e-mail address!',
  ],
],

可用的注脚约束

下边是具有的可用的验证约束和它们的功效的列表:

accepted

表达的字段必须为 yeson,1,或者
true。这一般用来验证服务条款的允诺。

active_url

讲明的字段必须可以经过 checkdnsrr PHP 方法的印证。

after:date

证实的字段必须是给定日期之后的值。日期会被传送到 strtotime PHP 方法:

`start_date' => 'required|date|after:tomorrow'

您也得以指定使用其他字段的日期来展开评估:

'finish_date' => 'required|date|after:start_date'

alpha

证实的字段必须一切是由字母字符组成的字符串。

alpha_dash

注脚的字段可以是字母,数字,-,_ 所结合的字符串。

alpha_num

证实的字段必须全方位由字母或数字所组成。

array

证实的字段必须是一个 PHP array

before:date

申明的字段的值必须比指定的日子要早。指定的日子会被传送到 PHP 的
strtotime 方法。

between:min,max

证实的字段的深浅必须在加以的 minmax
之间。字符串,数字和文件都会接纳和 size 约束的等同的评估办法。

boolean

表达的字段必须可以转移为布尔值。所接受的输入可以是
truefalse10"1""0"

confirmed

表明的字段必须能够和 foo_confirmation
字段相匹配。比如,即便注脚的字段是 password,相应的
password_confirmation 字段必须在输入中被提供且与 password 相匹配。

date

阐明的字段必须是一个卓有功效的日子,它应当能被 strtotime PHP 方法通过。

date_format:format

证实的字段必须协作给定的格式。该格式会被 PHP date_parse_from_format
方法评定,你应当只行使 date 或者 date_format
其中之一来举办验证字段,不要所有都施用。

different:field

阐明的字段必须与给定的字段分裂。

digits:value

表明的字段必须是数字类型并且有所指定的长度。

digits_between:min,max

表明的字段必须有所指定区间的长度。

dimensions

表明的字段必须是一个图纸类型的,并且必要符合指定的参数约束:

'avatar' => 'dimensions:min_with=100,min_height=200'

可用的参数有:min_widthmax_widthmin_heightmax_heightwidthheightratio

distinct

当与数组合营时,验证的字段中务必无法含有重复的值:

'foo.*.id' => 'distinct'

email

注明的字段必须是一个邮件地址的格式。

exists:table,column

声明的字段必须能在指定数据库表中检索的到。

Exists 基础约束用法

'state' => 'exists:states'

点名自定义列名称

'state' => 'exists:states,abbreviation'

您也足以像使用 where 语句一样指定添加更加多的查询条件:

'email' => 'exists:staff,email,account_id,1'

查询条件也足以选拔 ! 来申明否定值:

'eamil' => 'exists:staff,email,role,!admin'

你也得以传递 NULL 或者 NOT_NULL 到查询语句中:

'eamil' => 'exists:staff,email,deleted_at,NULL'

'eamil' => 'exists:staff,email,deleted_at,NOT_NULL'

极个其余图景下,你可能须求在 exists
查询下指定特定的数据库连接。你可以应用 .
语法将数据库连接名后置来拓展点名:

'email' => 'exists:connection.staff,email'

filled

表明的字段如若出现,那么它必将不可能为空值。

image

被声明的文件必须是一个图形类型(jpeg,png,bmp,gif,svg)

in:foo,bar,…

表达的字段必须是给定值列中的一个。

in_array:anotherfield

表明的字段必须是点名的字段中值列之一。

integer

证实的字段必须是一个平头。

ip

注脚的字段必须是一个 IP 地址。

json

表达的字段必须是官方的 JSON 字符串

max:value

证实的字段必须低于等于指定值。字符串,数字,和文件类型会与 size
约束使用同样的评估格局。

mimetypes:text/plain,…

申明的字段必须同盟给定的 MIME 类型:

'video' => 'mimetypes:video/avi,video/mpeg,video/quicktime'

为了判定所上传文件的 MIME 类型,laravel
会读取文件的情节还要会尝试估量文件的 MIME
类型,那或者会与客户端提供的文书 MIME 类型有所分歧。

mimes:foo,bar,…

表明的公文的 MIME 类型相应的后缀必须是所列的值之一。

基本功效法

'photo' => 'mimes:jpeg,bmp,png'

你只要求指定文件的伸张,这几个约束会指向文件的始末展开推断文件的 MIME
类型,然后进行伸张验证。

完整的 MIME 类型和其对应的恢弘后缀,你可以从
这里
找到。

min:value

表达的字段必须比指定的值要小。字符串,数字和文件类型会使用 size
约束相同的评估格局。

not_in:foo,bar,…

证实的字段不应该包涵在给定的值列中。

numeric

证实的字段必须是一个数值类型。

present

阐明的字段必须须求被提供,然则可以为空。

regex:pattern

表达的字段必须与给定的正则表明式相匹配。

注意:当使用 regex
情势时,你必须将封锁放进数组里来取代管道符分隔,尤其是在正则表明式中包括管道符时。

required

注解的字段必须被提供并且无法为空值。判断空值的按照:

  • 值是 null
  • 值是空字符串
  • 值是一个空数组或者空的 Countable 对象
  • 值是一个并未传递路径的上传的文件

required_if:anotherfield,value,…

表明的字段必须在偏下情状下被提供:指定的字段等于随便列出的值。

required_unless:anotherfield,value,…

评释的字段必须在以下情状下被提供: 所指定的字段和所提供的值都不对等。

required_with:foo,bar,…

证实的字段唯有在其它所指定字段之一被提供时才会被须要提供。

required_with_all:foo,bar,…

证实的字段唯有在其他所指定字段全体被提供时才会被必要提供。

required_without:foo,bar,…

表达的字段唯有在其他所指定字段之一没有被提供时被需要提供。

required_without_all:foo,bar,…

表达的字段唯有在所指定字段全体没有被提供时才会被须要提供。

same:field

所讲明的字段必须与指定的字段相匹配。

size:value

评释的字段必须持有给定值的高低。对于字符串数据,值应该是字符串的字符长度。对于数值数据,值应该是相应的整数值。对于数组,大小匹配数组的
count 大小。对于文本,应该同盟文件的字节大小。

string

表明的字段必须是一个字符串。

timezone

证实的字段必须是经过 PHP timezone_identifiers_list 方法验证的合法的
timezone 标识。

unique:table,column,except,idColumn

表明的字段必须在给定的数据表中绝无仅有,假如 column
选型没有被指定,那么会一直运用字段的名字。

指定自定义的列名

'email' => 'unique:users,email_address'

自定义数据库连接

极个别状态下,你恐怕需要指定自定义的数据库连接来进行表明。似乎上边所看到的,设置
unique:users
会使用默许的数据库连接来拓展封锁验证。假诺想指定其余数据库连接,你可以利用
. 语法并放置指定数据库连接:

'email' => 'unique:connection.users,email_address'

强迫 Unique 约束 忽略给定的 ID

偶尔,你恐怕会期待 unique 检查忽略给定的
ID。比如,考虑一下一个更新个人信息的意况,它应该提供用户的称呼,邮箱地址,和岗位。你恐怕会想要验证邮箱的唯一性。但是你只想阐明与用户的近年来邮箱不一样的邮箱的唯一性。也就是说你只想表明这些邮箱有没有被其余用户所选拔。你必要传递
ID 作为第七个参数来打招呼 unique 约束来忽略当前用户的 ID:

'email' => 'unique:users,email_address,'.$user->id

万一表名使用的主键列名不是 id
,那么你还索要指定主键的列名到第七个参数:

'email' => 'unique:users,email_address,'.$user->id.',user_id'

添加额外的规范查询

你也足以指定越多的尺度查询:

'email' => 'unique:users,email_address,null,id,account_id,1'

在上头的封锁中,唯有 account_id1 的行会被束缚举办自我批评。

url

表明的字段必须符合 PHP filter_var 方法验证的卓有功效 URL。

累加封锁规范

在有的光景中,你会希望只有字段出现在了输入数组中时才会对其举行验证。你可以在封锁列中添加
sometimes 约束来疾速的已毕指定:

$v = Validator::make($data, [
  'email' => 'sometimes|required|email',
]);

那上边的事例中,只有 $data 中提供了 email 字段,email
的束缚才会对其进展表达。

复杂的认证条件

有时,你也许会愿意基于更扑朔迷离的条件逻辑去开展封锁的辨证。比如,你指望只有其它一个字段拥有比
100
更大的值时才会声明给定的字段是还是不是被提供。又或者你想要在唯有其它一个字段被提供时才会需求任何八个字段的值。添加这个标准判定并非是难过的一件事。首先,你如故需要创造一个
Validator 实例和部分静态的羁绊:

$v = Validator::make($data, [
  'email' => 'required|email',
  'games' => 'required|numeric'
]);

让我们只要大家的运用是劳务于一些戏耍收藏家的。如若一个嬉戏收藏家注册了大家的选拔,并且它们添加了跨越
100
个游戏时。大家须要它们解释一下为啥他会具有那么多的游戏。比如,或许他开了一个娱乐贩卖超市,又或者他唯有就是喜欢收藏。我们得以行使
Validator 实例上的 sometimes 方法来添加这么些需要的基准:

$v->sometimes('reason', 'required|max:500', function ($input) {
  return $input->games >= 100;
});

传递到 sometimes
方法的首个参数是大家要求考虑验证的字段的名字。第一个参数是我们想要添加的羁绊。若是第多个参数传递的
Closure 重返的结果是
true,那么那一个约束就会被添加进去。这就足以轻松的对复杂的认证场景举行规范的打造。你甚至足以三次性的充足多个字段的规则申明:

$v->sometimes(['reson', 'cost'], 'required', function ($input) {
  return $input->games >= 100; 
});

注意:传递到 Closure 中的 $input 是一个
Illuminate\Support\Flument
实例,并且它可以被用来访问你的输入和文件。

自定义表达约束

Laravel
提供了各类有效的表达约束。不过,你或许希望添加你协调的特定的束缚。你能够拔取
Validator 假面的 extend
方法来注册自己的印证约束。让我们在劳动提供者里登记一个自定义的表达约束:

<?php

namespace App\Providers;

use Validator;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
  /**
   * Bootstrap any application services.
   *
   * @return void
   */
   public function boot()
   {
     Validator::extend('foo', function ($attribute, $value, $parameters, $validator) {
       return $value == 'foo';
     });
   }

   /**
    * Register the service provider.
    *
    * @return void
    */
    public function register()
    {
      //
    }
}

自定义的认证闭包中接收七个参数:必要被表明的属性名称,属性的值,一个内需被传送到约束的
$paramters 数组,和 Validator 实例。

你也足以传递一个类名和措施到 extend 方法中来取代闭包:

Validator::extend('foo', 'FooValidator@validate');

概念错误音讯

你也亟需为你的自定义约束添加一个漏洞极度多音讯。你可以动用行内自定义错误新闻仍旧将其添加到独立的认证语言文件中。那几个信息应该被存放在在数组的一维中,而不是带有在
custom 数组里:

"foo" => 'Your input was invalid!',

'accepted' => 'The :attribute must be accepted.',

// The rest of the validation error messages...

当营造自定义的辨证约束时,你或许有时也想为错误音信定义一些占位符。你能够拔取
Validator 假面的 replacer 方法来开展占位替换。你可以在劳动提供者的
boot 方法中来做那几个:

/**
 * Bootstrap any application services.
 *
 * @return void
 */
 public function boot()
 {
   Validator::extend(...);

   Validator::replacer('foo', function ($message, $attribute, $rule, $parameters) {
     return str_replace(...);
   });
 }

隐式的扩充

默许的,当属性被注解时,借使在输入数组中尚无被提供,或者注脚约束为
required
却是一个空值。那么一般的辨证约束,包蕴自定义的约束增加,都不会再实施。比如,unique
约束就不会在产出 null 值举办实施:

$rules = ['name' => 'unique'];

$input = ['name' => null];

Validator:make($input, $rules)->passes(); // true

即使急需约束即使是属性值为空时也继续执行,那么约束须求暗示属性是必须的。你可以接纳
Validator::extendImplicit() 方法来创设一个 “隐式的” 增添:

Validator::extendImplicit('foo', function ($attribute, $value, $parameters, $validator) {
  return $value == 'foo'; 
});

留神:
隐式的扩充仅仅是暗示属性是必须的,不论它实质上是缺失的值或者是空的特性,那都取决于你。

相关文章