验证

简介

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'; 
});

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

相关文章