如何在laravel 表单验证中将多个字段进行组合

2021-02-06 16:57:33 179
爱秀

如何在laravel 表单验证中将多个字段进行组合?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

Laravel 表单验证器的几种使用方法

1、使用控制器的 validate 方法进行参数验证

/**
*保存一篇新的博客文章。
*
*@paramRequest$request
*@returnResponse
*/
publicfunctionstore(Request$request)
{
$this->validate($request,[
'title'=>'required|unique:posts|max:255',
'body'=>'required',
]);

//文章内容是符合规则的,存入数据库
}

2、手动创建验证器实例进行验证

使用默认的验证信息

/**
*保存一篇新的博客文章。
*
*@paramRequest$request
*@returnResponse
*/
publicfunctionstore(Request$request)
{
$rules=[
'title'=>'required|unique:posts|max:255',
'body'=>'required',
];
$validator=Validator::make($request->all(),$rules);
if($validator->fails()){
returnredirect('post/create')->withErrors($validator)->withInput();
}

//文章内容是符合规则的,存入数据库
}

使用自定义的验证信息

/**
*保存一篇新的博客文章。
*
*@paramRequest$request
*@returnResponse
*/
publicfunctionstore(Request$request)
{
$rules=[
'title'=>'required|unique:posts|max:255',
'body'=>'required',
];
$messages=[
'title.required'=>'请填写文章标题',
'title.unique'=>'文章标题不能重复',
'title.max'=>'文章标题不能超过255个字符',
'body.required'=>'请填写文章内容',
];
$validator=Validator::make($request->all(),$rules,$messages);
if($validator->fails()){
returnredirect('post/create')->withErrors($validator)->withInput();
}

//文章内容是符合规则的,存入数据库
}

3、创建表单请求进行验证

创建表单请求文件:php artisan make:request ExampleRequest表单请求文件内容:

<?php

namespaceApp\Http\Requests;

useIlluminate\Contracts\Validation\Validator;
useIlluminate\Foundation\Http\FormRequest;
useIlluminate\Http\Exceptions\HttpResponseException;
useIlluminate\Http\JsonResponse;

classExampleRequestextendsFormRequest
{
/**
*Determineiftheuserisauthorizedtomakethisrequest.
*
*@returnbool
*/
publicfunctionauthorize()
{
returntrue;
}

/**
*Getthevalidationrulesthatapplytotherequest.
*
*@returnarray
*/
publicfunctionrules()
{
return[
'title'=>'required|max:20',
'name'=>['required',newUppercase()],
];
}

/**
*获取已定义的验证规则的错误消息。
*
*@returnarray
*/
publicfunctionmessages()
{
return[
'title.required'=>'Atitleisrequired',
'title.max'=>'Thetitlemaynotbegreaterthan20characters.',
];
}

/**
*兼容form表单请求与ajax请求或者jsonapi请求
*验证失败,返回错误信息
*
*@paramValidator$validator
*@throws
*/
protectedfunctionfailedValidation(Validator$validator)
{
if($this->wantsJson()||$this->ajax()){
thrownewHttpResponseException(
newJsonResponse([
'code'=>500,
'msg'=>$validator->errors()->first(),
'data'=>new\stdClass()
])
);
}else{
parent::failedValidation($validator);
}
}
}

在控制器中使用 ExampleRequest

<?php

namespaceApp\Http\Controllers;

useApp\Http\Controllers\Controller;
useApp\Http\Requests\ExampleRequest;

classExampleControllerextendsController
{
publicfunctionvalid(ExampleRequest$request)
{
$params=$request->all();
dd($params);
}
}

在laravel 表单验证中,常会遇到需要几个字段组合起来做唯一限制。

解决方案如下:

where[]=['parentId','=',where[]=[′parentId′,′=′,this->request->get('parentId')];
return[

'menuTitle'=>['required','max:32','min:2',Rule::unique('admin_menu','menuTitle')->where(function($query)use($where){
$query->where($where)->whereNull('deleted_at');
})->ignore($id)],
'menuTitleEn'=>['required','max:32','min:2',Rule::unique('admin_menu','menuTitleEn')->where(function($query)use($where){
$query->where($where)->whereNull('deleted_at');
})->ignore($id)],
'menuRoute'=>['required',Rule::unique('admin_menu','menuRoute')->ignore($id)],
'menuIcon'=>['required','min:2','max:32'],
'routeName'=>['sometimes','min:2','max:32'],
'parentId'=>['required','numeric'],
'order'=>['sometimes','numeric']

];

关于如何在laravel 表单验证中将多个字段进行组合问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注恰卡编程网行业资讯频道了解更多相关知识。

分享
海报
179
上一篇:PHP中-&amp;gt;、self、$this三者的区别是什么 下一篇:利用TreeView怎么实现无刷新获取text和value

忘记密码?

图形验证码