1、使用控制器的 validate 方法进行参数验证
场景一:前后端未分离
/**
* 保存一篇新的博客文章。
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
$this->validate($request, [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
// 文章内容是符合规则的,存入数据库
}
若验证失败参考:Validation - Laravel 中文网 为 Web 工匠创造的 PHP 框架
场景二:前后端分离
public function store(Request $request)
{
try{
$validatorData = $request->validate([
'admin_username' => ['required', 'unique:admin_users', 'max:20'],
'admin_pwd' => ['required', 'max:70'],
'admin_tel' => ['required', 'unique:admin_users', 'size:11'],
'auth_id' => ['required'],
]);
} catch (\Exception $exception){
dump("exception");
dump($exception->getMessage());//显示一条错误消息(and x more error)
dd($exception->errors());//一个包含所有错误消息的数组
}
dd($validatorData);//验证通过后的数据
// 文章内容是符合规则的,存入数据库
}
验证失败:
使用try{}catch(){}捕获错误消息
验证通过:
2、手动创建验证器实例进行验证
2.1 使用默认的验证信息
use Illuminate\Support\Facades\Validator;
public function store(Request $request)
{
$rules = [
'admin_username' => ['required', 'unique:admin_users', 'max:20'],
'admin_pwd' => ['required', 'max:70'],
'admin_tel' => ['required', 'unique:admin_users', 'size:11'],
'auth_id' => ['required'],
];
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
dump($validator->attributes());//需要验证属性
dump($validator->valid());//验证通过的(有效的)
dump($validator->messages());//所有的错误消息
dump($validator->getMessageBag());//所有的错误消息(同上)
dd($validator->errors());//所有的错误消息(同上)
}
dd($validator);
// 文章内容是符合规则的,存入数据库
}
2.2 使用自定义的验证信息
举个栗子
/**
* 添加一个新的用户。
*
* @param Request $request
* @return Response
*/
public function add(Request $request)
{
$rules = [
'admin_username' => ['required', 'unique:admin_users', 'max:20'],
'admin_pwd' => ['required', 'max:70', Password::min(6)->numbers()->letters()],
'admin_tel' => ['required', 'unique:admin_users', 'size:11'],
'auth_id' => ['required'],
'admin_realname' => ['required'],
];
$messages = [
'admin_username.required'=>':attribute 必填',
'admin_username.unique'=>':attribute 已存在',
'admin_username.max:20'=>':attribute 最多20个字符',
'admin_pwd.required'=>':attribute 必填',
'admin_pwd.max'=>':attribute 最多70个字符',
'admin_pwd'=>':attribute 最少6位数,且必须包含字母和数字',
'admin_tel.required'=>':attribute 必填',
'admin_tel.unique'=>':attribute 已存在',
'admin_tel.size'=>':attribute 必须11位数',
'auth_id.required'=>':attribute 必选',
'admin_realname.required'=>':attribute 必填',
];
$attributes = [
'admin_username'=>"用户名",
'admin_pwd'=>"密码",
'admin_tel'=>"手机号",
'auth_id'=>"角色",
'admin_realname'=>"真实姓名",
];
$validator = Validator::make($request->all(), $rules, $messages, $attributes);
if ($validator->fails()) {
return $this->outputError(info: $validator->errors());
}
$data = $validator->getData();//获取验证的数据
$data = $validator->valid();/获取验证通过的(有效的)数据
// 文章内容是符合规则的,存入数据库
}