目次
1. はじめに
2. クイックスタート
2.1 ルートを定義する
2.2 コントローラーの作成
2.3 検証ロジックの作成
3、其它验证方法
3.1 手动创建验证器
3.2 表单请求验证
4、处理错误信息
4.1 自定义错误信息
5、验证规则大全
accepted
active_url
after:date
alpha
alpha_dash
alpha_num
array
before:date
between:min,max
boolean
confirmed
date
date_format:format
different:field
digits:value
digits_between:min,max
email
exists:table.column
image
in:foo,bar…
integer
ip
JSON
max:value
mimes:foo,bar,…
min:value
not_in:foo,bar,…
numeric
regex:pattern
required
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
string
timezone
unique:table,column,except,idColumn
url
6、添加条件规则
7、自定义验证规则
ホームページ バックエンド開発 PHPチュートリアル [ Laravel 5.2 ドキュメント ] サービス -- 検証

[ Laravel 5.2 ドキュメント ] サービス -- 検証

Jun 23, 2016 pm 01:17 PM

1. はじめに

Laravel は、アプリケーションの入力データを検証するためのさまざまなメソッドを提供します。デフォルトでは、Laravel のコントローラー基本クラスは ValidatesRequeststrait を使用します。これは、さまざまな強力な検証ルールを通じて受信 HTTP リクエストを検証するための便利なメソッドを提供します。

2. クイックスタート

Laravel の強力な検証機能をマスターするには、まず完全な検証フォームとユーザーにエラー情報を返す例を見てみましょう。

2.1 ルートを定義する

まず、app/Http/routes.php ファイルに次のルートが含まれていることを前提とします:

// 显示创建博客文章表单...Route::get('post/create', 'PostController@create');// 存储新的博客文章...Route::post('post', 'PostController@store');
ログイン後にコピー

もちろん、GET ルートにはユーザーに新しいブログ投稿を作成するためのフォームが表示され、 POST ルートはブログ投稿をデータベースに保存します。

2.2 コントローラーの作成

次に、これらのルートを処理する簡単なコントローラーの例を見てみましょう。まず、store メソッドを空のままにしておきます:

<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use App\Http\Controllers\Controller;class PostController extends Controller{    /**     * 显示创建新的博客文章的表单     *     * @return Response     */    public function create()    {        return view('post.create');    }    /**     * 存储新的博客文章     *     * @param  Request  $request     * @return Response     */    public function store(Request $request)    {        // 验证并存储博客文章...    }}
ログイン後にコピー

2.3 検証ロジックの作成

これで、新しいブログ投稿の入力を検証するロジックを store メソッドに入力する準備が整いました。アプリケーションの基本コントローラー クラス (AppHttpControllersController) を調べると、すべてのコントローラーで便利な検証メソッドを提供する ValidatesRequeststrait が使用されていることがわかります。

validate メソッドは HTTP リクエストの入力データと検証ルールを受け取ります。検証ルールが合格した場合、コードは引き続き実行されます。ただし、検証が失敗した場合は、例外がスローされ、対応するエラー応答が自動的に送信されます。ユーザー。 。従来の HTTP リクエストの場合はリダイレクト応答が生成され、AJAX リクエストの場合は JSON 応答が返されます。

validate メソッドをよりよく理解するために、store メソッドに戻りましょう:

/** * 存储博客文章 * * @param  Request  $request * @return Response */public function store(Request $request){    $this->validate($request, [        'title' => 'required|unique:posts|max:255',        'body' => 'required',    ]);    // 验证通过,存储到数据库...}
ログイン後にコピー

ご覧のとおり、受信した HTTP リクエストと必要な検証ルールを validate メソッドに渡し、検証が失敗した場合に 1 回強調表示するだけです。対応する応答が自動的に生成されます。検証に合格すると、コントローラーは通常どおりに実行を続けます。

最初の検証が失敗した後、後続のルール検証を停止する

最初の検証が失敗した後、他の検証ルールの属性のチェックを停止したい場合があります。この機能を実現するには、属性に保釈ルールを割り当てることができます:

$this->validate($request, [    'title' => 'bail|required|unique:posts|max:255',    'body' => 'required',]);
ログイン後にコピー

この例では。 , title 属性で必要なルールの検証が失敗した場合、固有のルールはチェックされず、割り当てられた順にルールが順番に検証されます。

ネストされた属性に関する注意事項

HTTP リクエストに「ネストされた」パラメータが含まれる場合、「.」を使用して検証ルールで指定できます:

$this->validate($request, [    'title' => 'required|unique:posts|max:255',    'author.name' => 'required',    'author.description' => 'required',]);
ログイン後にコピー

2.4 検証エラー メッセージを表示する

次に、リクエストの入力パラメータが指定された検証ルールが合格した場合はどうすればよいですか?前述したように、Laravel はユーザーを自動的に前の場所にリダイレクトします。さらに、すべての検証エラー メッセージは、一度にセッションに自動的に保存されます。

GET ルートのビューにエラー メッセージを明示的にバインドしていないことに注意してください。これは、Laravel がセッションデータからのエラーメッセージを常にチェックし、エラーメッセージがあれば自動的にビューにバインドするためです。したがって、リクエストごとにすべてのビューに常に

$errors 変数が存在し、ビュー内で便利かつ安全に使用できることに注意してください。 $errors 変数は IlluminateSupportMessageBag のインスタンスです。このオブジェクトの詳細については、そのドキュメントを参照してください。

注: $errors 変数は、Web ミドルウェア グループの IlluminateViewMiddlewareShareErrorsFromSession ミドルウェアを通じてビューにバインドされ、このミドルウェアを使用すると、$errors 変数はビュー内で常に有効になり、使いやすくなります。いつでも。

したがって、この例では、検証が失敗した場合、ユーザーはコントローラーの作成メソッドにリダイレクトされ、ビューにエラー メッセージを表示できるようになります:

<!-- /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 -->
ログイン後にコピー

カスタム エラー形式

カスタマイズしたい場合は、セッションに保存された検証エラー情報の形式を変更するには、コントローラーの基本クラスの formatValidationErrors メソッドをオーバーライドする必要があります (コントローラー クラスの先頭に IlluminateContractsValidationValidator クラスをインポートすることを忘れないでください):

<?phpnamespace 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();    }}
ログイン後にコピー

2.5 AJAX リクエストと検証

in この例では、従来のフォームを使用してデータをアプリケーションに送信します。ただし、多くのアプリケーションは AJAX リクエストを使用します。 Laravelは、AJAXリクエストでvalidateメソッドを使用する場合、リダイレクト応答を生成しません。代わりに、Laravel は検証エラー情報を含む JSON 応答を生成します。 JSON 応答には HTTP ステータス コード 422 が含まれます。

2.6 配列入力の検証

Laravel 5.2 では、フォーム配列入力フィールドの検証は面倒ではなくなりました。たとえば、指定された配列入力内の各メールが一意であるかどうかを確認するには、次のようにすることができます。また、* 文字を使用して言語ファイル内で検証メッセージを指定すると、単一のメッセージを使用して配列フィールドに基づいた検証ルールを定義できます:

'custom' => [    'person.*.email' => [        'unique' => 'Each person must have a unique e-mail address',    ]],
ログイン後にコピー

3、其它验证方法

3.1 手动创建验证器

如果你不想使用 ValidatesRequeststrait的 validate方法,可以使用 Validator门面手动创建一个验证器实例,该门面上的 make方法用于生成一个新的验证器实例:

<?phpnamespace App\Http\Controllers;use Validator;use Illuminate\Http\Request;use App\Http\Controllers\Controller;class PostController extends Controller{    /**     * 存储新的博客文章     *     * @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();        }        // 存储博客文章...    }}
ログイン後にコピー

传递给 make方法的第一个参数是需要验证的数据,第二个参数是要应用到数据上的验证规则。

检查请求是够通过验证后,可以使用 withErrors方法将错误数据一次性存放到session,使用该方法时, $errors变量重定向后自动在视图间共享,从而允许你轻松将其显示给用户, withErrors方法接收一个验证器、或者一个MessageBag,又或者一个PHP数组。

命名错误包

如果你在单个页面上有多个表单,可能需要命名MessageBag,从而允许你为指定表单获取错误信息。只需要传递名称作为第二个参数给 withErrors即可:

return redirect('register')            ->withErrors($validator, 'login');
ログイン後にコピー

然后你就可以从 $errors变量中访问命名的MessageBag实例:

{{ $errors->login->first('email') }}
ログイン後にコピー

验证钩子之后

验证器允许你在验证完成后添加回调,这种机制允许你轻松执行更多验证,甚至添加更多错误信息到消息集合。使用验证器实例上的 after方法即可:

$validator = Validator::make(...);$validator->after(function($validator) {    if ($this->somethingElseIsInvalid()) {        $validator->errors()->add('field', 'Something is wrong with this field!');    }});if ($validator->fails()) {    //}
ログイン後にコピー

3.2 表单请求验证

对于更复杂的验证场景,你可能想要创建一个“表单请求”。表单请求是包含验证逻辑的自定义请求类,要创建表单验证类,可以使用Artisan命令 make:request:

php artisan make:request StoreBlogPostRequest
ログイン後にコピー

生成的类位于 app/Http/Requests目录下,接下来我们添加少许验证规则到 rules方法:

/** * 获取应用到请求的验证规则 * * @return array */public function rules(){    return [        'title' => 'required|unique:posts|max:255',        'body' => 'required',    ];}
ログイン後にコピー

那么,验证规则如何生效呢?你所要做的就是在控制器方法中类型提示该请求。表单输入请求会在控制器方法被调用之前被验证,这就是说你不需要将控制器和验证逻辑杂糅在一起:

/** * 存储输入的博客文章 * * @param  StoreBlogPostRequest  $request * @return Response */public function store(StoreBlogPostRequest $request){    // The incoming request is valid...}
ログイン後にコピー

如果验证失败,重定向响应会被生成并将用户退回上一个位置,错误信息也会被一次性存储到session以便在视图中显示。如果是AJAX请求,带 422状态码的HTTP响应将会返回给用户,该响应数据中还包含了JSON格式的验证错误信息。

认证表单请求

表单请求类还包含了一个 authorize方法,你可以检查认证用户是否有资格更新指定资源。例如,如果用户尝试更新一个博客评论,那么他是否是评论的所有者呢?举个例子:

/** * 判断请求用户是否经过认证 * * @return bool */public function authorize(){    $commentId = $this->route('comment');    return Comment::where('id', $commentId)                  ->where('user_id', Auth::id())->exists();}
ログイン後にコピー

注意上面这个例子中对 route方法的调用。该方法赋予用户访问被调用路由URI参数的权限,比如下面这个例子中的 {comment}参数:

Route::post('comment/{comment}');
ログイン後にコピー

如果 authorize方法返回 false,一个包含 403状态码的HTTP响应会自动返回而且控制器方法将不会被执行。

如果你计划在应用的其他部分包含认证逻辑,只需在 authorize方法中简单返回 true即可:

/** * 判断请求用户是否经过认证 * * @return bool */public function authorize(){    return true;}
ログイン後にコピー

自定义错误格式

如果你想要自定义验证失败时一次性存储到session中验证错误信息的格式,重写请求基类( App\Http\Requests\Request)中的 formatErrors方法即可。不要忘记在文件顶部导入 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 messages(){    return [        'title.required' => 'A title is required',        'body.required'  => 'A message is required',    ];}
ログイン後にコピー

4、处理错误信息

调用Validator实例上的 errors方法之后,将会获取一个 Illuminate\Support\MessageBag实例,该实例中包含了多种处理错误信息的便利方法。

获取某字段的第一条错误信息

要获取指定字段的第一条错误信息,可以使用 first方法:

$messages = $validator->errors();echo $messages->first('email');
ログイン後にコピー

获取指定字段的所有错误信息

如果你想要简单获取指定字段的所有错误信息数组,使用 get方法:

foreach ($messages->get('email') as $message) {    //}
ログイン後にコピー

获取所有字段的所有错误信息

要获取所有字段的所有错误信息,可以使用 all方法:

foreach ($messages->all() as $message) {    //}
ログイン後にコピー

判断消息中是否存在某字段的错误信息

if ($messages->has('email')) {    //}
ログイン後にコピー

获取指定格式的错误信息

echo $messages->first('email', '<p>:message</p>');
ログイン後にコピー

获取指定格式的所有错误信息

foreach ($messages->all('<li>:message</li>') as $message) {    //}
ログイン後にコピー

4.1 自定义错误信息

如果需要的话,你可以使用自定义错误信息替代默认的,有多种方法来指定自定义信息。首先,你可以传递自定义信息作为第三方参数给 Validator::make方法:

$messages = [    'required' => 'The :attribute field is required.',];$validator = Validator::make($input, $rules, $messages);
ログイン後にコピー

在本例中, :attribute占位符将会被验证时实际的字段名替换,你还可以在验证消息中使用其他占位符,例如:

$messages = [    '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',];
ログイン後にコピー

为给定属性指定自定义信息

有时候你可能只想为特定字段指定自定义错误信息,可以通过”.”来实现,首先指定属性名,然后是规则:

$messages = [    '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!',    ],],
ログイン後にコピー

5、验证规则大全

下面是有效规则及其函数列表:

  • Accepted
  • Active URL
  • After (Date)
  • Alpha
  • Alpha Dash
  • Alpha Numeric
  • Array
  • Before (Date)
  • Between
  • Boolean
  • Confirmed
  • Date
  • Date Format
  • Different
  • Digits
  • Digits Between
  • E-Mail
  • Exists (Database)
  • Image (File)
  • In
  • Integer
  • IP Address
  • JSON
  • Max
  • MIME Types (File)
  • Min
  • Not In
  • Numeric
  • Regular Expression
  • Required
  • Required If
  • Required Unless
  • Required With
  • Required With All
  • Required Without
  • Required Without All
  • Same
  • Size
  • String
  • Timezone
  • Unique (Database)
  • URL

accepted

在验证中该字段的值必须是 yes、 on、 1或 true,这在“同意服务协议”时很有用。

active_url

该字段必须是一个基于PHP函数 checkdnsrr的有效URL

after:date

该字段必须是给定日期后的一个值,日期将会通过PHP函数 strtotime传递:

'start_date' => 'required|date|after:tomorrow'
ログイン後にコピー

你可以指定另外一个比较字段而不是使用strtotime验证传递的日期字符串:

'finish_date' => 'required|date|after:start_date'
ログイン後にコピー

alpha

该字段必须是字母

alpha_dash

该字段可以包含字母和数字,以及破折号和下划线

alpha_num

该字段必须是字母或数字

array

该字段必须是PHP数组

before:date

验证字段必须是指定日期之前的一个数值,该日期将会传递给PHP strtotime函数。

between:min,max

验证字段尺寸在给定的最小值和最大值之间,字符串、数值和文件都可以使用该规则

boolean

验证字段必须可以被转化为 boolean,接收 true, false, 1, 0, "1", 和 "0"等输入。

confirmed

验证字段必须有一个匹配字段 foo_confirmation,例如,如果验证字段是 password,必须输入一个与之匹配的 password_confirmation字段

date

验证字段必须是一个基于PHP strtotime函数的有效日期

date_format:format

验证字段必须匹配指定格式,该格式将使用PHP函数 date_parse_from_format进行验证。你应该在验证字段时使用 date或 date_format

different:field

验证字段必须是一个和指定字段不同的值

digits:value

验证字段必须是数字且长度为 value指定的值

digits_between:min,max

验证字段数值长度必须介于最小值和最大值之间

email

验证字段必须是格式化的电子邮件地址

exists:table.column

验证字段必须存在于指定数据表

基本使用:

'state' => 'exists:states'
ログイン後にコピー

指定自定义列名:

'state' => 'exists:states,abbreviation'
ログイン後にコピー

还可以添加更多查询条件到 where查询子句:

'email' => 'exists:staff,email,account_id,1'
ログイン後にコピー

传递NULL作为 where子句的值将会判断数据库值是否为NULL:

'email' => 'exists:staff,email,deleted_at,NULL'
ログイン後にコピー

image

验证文件必须是图片(jpeg、png、bmp、gif或者svg)

in:foo,bar…

验证字段值必须在给定的列表中

integer

验证字段必须是整型

ip

验证字段必须是IP地址

JSON

验证字段必须是有效的JSON字符串

max:value

验证字段必须小于等于最大值,和字符串、数值、文件字段的size规则一起使用

mimes:foo,bar,…

验证文件的MIMIE类型必须是该规则列出的扩展类型中的一个

MIMIE规则的基本使用:

'photo' => 'mimes:jpeg,bmp,png'
ログイン後にコピー

尽管你只需要指定扩展,该规则实际上验证的是通过读取文件内容获取到的文件MIME类型。

完整的MIME类型列表及其相应的扩展可以在这里找到: http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types

min:value

验证字段的最小值,和字符串、数值、文件字段的size规则一起使用

not_in:foo,bar,…

验证字段值不在给定列表中

numeric

验证字段必须是数值

regex:pattern

验证字段必须匹配给定正则表达式

注意:使用 regex模式时,规则必须放在数组中,而不能使用管道分隔符,尤其是正则表达式中使用管道符号时。

required

输入字段值不能为空,以下情况字段值都为空:

  • 值为null
  • 值是空字符串
  • 值是空数组或者空的Coutable对象
  • 值是上传文件但路径为空

required_if:anotherfield,value,…

验证字段在另一个字段等于指定值value时是必须的

required_unless:anotherfield,value,…

除了 anotherfield字段等于value,验证字段不能空

required_with:foo,bar,…

验证字段只有在任一其它指定字段存在的话才是必须的

required_with_all:foo,bar,…

验证字段只有在所有指定字段存在的情况下才是必须的

required_without:foo,bar,…

验证字段只有当任一指定字段不存在的情况下才是必须的

required_without_all:foo,bar,…

验证字段只有当所有指定字段不存在的情况下才是必须的

same:field

给定字段和验证字段必须匹配

size:value

验证字段必须有和给定值相value匹配的尺寸,对字符串而言, value是相应的字符数目;对数值而言, value是给定整型值;对文件而言, value是相应的文件字节数

string

验证字段必须是字符串

timezone

验证字符必须是基于PHP函数 timezone_identifiers_list的有效时区标识

unique:table,column,except,idColumn

验证字段在给定数据表上必须是唯一的,如果不指定 column选项,字段名将作为默认 column。

指定自定义列名:

'email' => 'unique:users,email_address'
ログイン後にコピー

自定义数据库连接

有时候,你可能需要自定义验证器生成的数据库连接,正如上面所看到的,设置 unique:users作为验证规则将会使用默认数据库连接来查询数据库。要覆盖默认连接,在数据表名后使用”.“指定连接:

'email' => 'unique:connection.users,email_address'
ログイン後にコピー

强制一个唯一规则来忽略给定ID:

有时候,你可能希望在唯一检查时忽略给定ID,例如,考虑一个包含用户名、邮箱地址和位置的”更新属性“界面,当然,你将会验证邮箱地址是唯一的,然而,如果用户只改变用户名字段而并没有改变邮箱字段,你不想要因为用户已经拥有该邮箱地址而抛出验证错误,你只想要在用户提供的邮箱已经被别人使用的情况下才抛出验证错误,要告诉唯一规则忽略用户ID,可以传递ID作为第三个参数:

'email' => 'unique:users,email_address,'.$user->id
ログイン後にコピー

添加额外的 where子句:

还可以指定更多条件给 where子句:

'email' => 'unique:users,email_address,NULL,id,account_id,1'
ログイン後にコピー

url

验证字段必须是基于PHP函数 filter_var过滤的的有效URL

6、添加条件规则

在某些场景下,你可能想要只有某个字段存在的情况下运行验证检查,要快速完成这个,添加 sometimes规则到规则列表:

$v = Validator::make($data, [    'email' => 'sometimes|required|email',]);
ログイン後にコピー

在上例中,email字段只有存在于 $data数组时才会被验证。

复杂条件验证

有时候你可能想要基于更复杂的条件逻辑添加验证规则。例如,你可能想要只有在另一个字段值大于 100时才要求一个给定字段是必须的,或者,你可能需要只有当另一个字段存在时两个字段才都有给定值。添加这个验证规则并不是一件头疼的事。首先,创建一个永远不会改变的静态规则到 Validator实例:

$v = Validator::make($data, [    'email' => 'required|email',    'games' => 'required|numeric',]);
ログイン後にコピー

让我们假定我们的web应用服务于游戏收集者。如果一个游戏收集者注册了我们的应用并拥有超过 100个游戏,我们想要他们解释为什么他们会有这么多游戏,例如,也许他们在运营一个游戏二手店,又或者他们只是喜欢收集。要添加这种条件,我们可以使用Validator实例上的 sometimes方法:

$v->sometimes('reason', 'required|max:500', function($input) {    return $input->games >= 100;});
ログイン後にコピー

传递给 sometimes方法的第一个参数是我们需要有条件验证的名称字段,第二个参数是我们想要添加的规则,如果作为第三个参数的闭包返回 true,规则被添加。该方法让构建复杂条件验证变得简单,你甚至可以一次为多个字段添加条件验证:

$v->sometimes(['reason', 'cost'], 'required', function($input) {    return $input->games >= 100;});
ログイン後にコピー

注意:传递给闭包的 $input参数是 Illuminate\Support\Fluent的一个实例,可用于访问输入和文件。

7、自定义验证规则

Laravel提供了多种有用的验证规则;然而,你可能还是想要指定一些自己的验证规则。注册验证规则的一种方法是使用 Validator门面的extend方法。让我们在服务提供者中使用这种方法来注册一个自定义的验证规则:

<?phpnamespace App\Providers;use Validator;use Illuminate\Support\ServiceProvider;class AppServiceProvider extends ServiceProvider{    /**     * 启动应用服务     *     * @return void     */    public function boot()    {        Validator::extend('foo', function($attribute, $value, $parameters) {            return $value == 'foo';        });    }    /**     * 注册服务提供者     *     * @return void     */    public function register()    {        //    }}
ログイン後にコピー

自定义验证器闭包接收三个参数:要验证的属性名称,属性值和传递给规则的参数数组。

你还可以传递类和方法到 extend方法而不是闭包:

Validator::extend('foo', 'FooValidator@validate');
ログイン後にコピー

定义错误信息

你还需要为自定义规则定义错误信息。你可以使用内联自定义消息数组或者在验证语言文件中添加条目来实现这一目的。消息应该被放到数组的第一维,而不是在只用于存放属性指定错误信息的 custom数组内:

"foo" => "Your input was invalid!","accepted" => "The :attribute must be accepted.",// 验证错误信息其它部分...
ログイン後にコピー

当创建一个自定义验证规则时,你可能有时候需要为错误信息定义自定义占位符,可以通过创建自定义验证器然后调用 Validator门面上的 replacer方法来实现。可以在服务提供者的 boot方法中编写代码:

/** * 启动应用服务 * * @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';});
ログイン後にコピー

注意:一个隐式扩展仅仅暗示属性是必须的,至于它到底是缺失的还是空值这取决于你。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

Instagram APIの紹介 Instagram APIの紹介 Mar 02, 2025 am 09:32 AM

2012年のFacebookによる有名な買収に続いて、Instagramはサードパーティの使用のために2セットのAPIを採用しました。これらはInstagramグラフAPIとInstagram Basic Display APIです。

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP状況調査の発表 2025 PHP状況調査の発表 Mar 03, 2025 pm 04:20 PM

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています

See all articles