laravel 表单验证
laravel 表单验证
表单验证,可以用一下三种方式实现验证。
1、常规验证
copyuse Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
public function update(Request $request)
{
$params = $request->all();
$validate = Validator::make($params, [
'name' => 'bail|required',
'status' => 'bail|required|integer',
], [
'name.required' => '请填写名称',
'status.required' => 'status参错错误',
'status.integer' => 'status参错错误',
]);
if ($validate->fails()) {
$msg = $validate->errors()->first();
return response()->json(['error' => 1, 'msg' => $msg, 'data' => []]);
}
//--验证成功后,业务代码...
}
2、封装一个方法验证
copy/**
* 验证参数
* @param $params
* @param string $type 类型
* @return array
*/
private function _validate($params, $type = 'store')
{
$rules = [];
$messages = [];
$return = ['error' => 0, 'msg' => '', 'data' => []];
switch ($type) {
case 'store':
$rules = [
'name' => 'bail|required',
'status' => 'bail|required|integer',
];
$messages = [
'name.required' => '请填写名称',
'status.required' => 'status参错错误',
'status.integer' => 'status参错错误',
];
break;
case 'update':
$rules = [
'id' => 'bail|required',
'name' => 'bail|required',
'status' => 'bail|required|integer',
];
$messages = [
'id.required' => 'ID有误',
'name.required' => '请填写名称',
'status.required' => 'status参错错误',
'status.integer' => 'status参错错误',
];
break;
}
$validate = Validator::make($params, $rules, $messages);
if ($validate->fails()) {
$msg = $validate->errors()->first();
$return['error'] = 1;
$return['msg'] = $msg;
}
return $return;
}
调用
copyuse Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
public function update(Request $request)
{
$params = $request->all();
$rs = $this->_validate($params, 'update');
if ($rs['error'] != 0) {
return response()->json([
'error' => $rs['error'],
'msg' => $rs['msg'],
'data' => $rs['data']
]);
}
//--验证成功,业务操作...
}
3、创建请求类验证
copyphp artisan make:request FormRequest
php artisan make:request CreateOrUpdateRequest
FormRequest
的目的是重写 failedValidation
,将验证错误信息返回。
copy<?php
namespace App\Http\Requests;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest as BaseFormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;
class FormRequest extends BaseFormRequest
{
protected function failedValidation(Validator $validator) {
$error= $validator->errors()->all();
throw new HttpResponseException(
response()->json(['error'=>'1','msg'=>$error[0],'data'=>[]])
);
}
}
copy<?php
namespace App\Http\Requests;
class CreateOrUpdateRequest extends FormRequest //继承上面的FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
$rules = [
'name' => 'required|max:255'
];
//根据请求方式来判断,新增还是编辑,post=新增,put=编辑
switch ($this->method()) {
case 'POST':
$rules['status'] = 'bail|required|integer';
break;
case 'PUT':
$rules['id'] = 'bail|required';
$rules['status'] = 'bail|required|integer';
break;
}
return $rules;
}
public function messages()
{
return [
'name.required' => '名称必填',
'name.max' => '名称过长',
];
}
}
调用
copy//直接注入,即完成验证
public function update(CreateOrUpdateRequest $request)
{
$data = $request->validated();
//返回已验证的参数值,会过滤掉没有参与验证的参数
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构