Laravel 5.5 validator 使用 request from
为了简化代码提高代码的复用性,引入 form request 去验证
-
项目在刚开始验证数据统一在控制器验证 贴出控制器验证代码
$data = $request->all();
//请求参数验证
$rules = [
'content' => 'required|max:255'
];
$messages = [
'required' => '必填',
'max' =>'最大长度不超过255'
];
$validator = Validator::make(['content'=>$data['content']], $rules, $messages);
//如果验证出错误,提示错误
if ($validator->fails()) {
return ........
}注意在控制器的头部引入门面 validator use Illuminate\Support\Facades\Validator
-
以上在控制器验证 已经满足项目的需求, 但是这样控制器的代码量很大 也不能提高代码的复用性。 所以本人研究使用form request 去做验证步骤如下
首先建立 form request 的代码 可以使用命令 可以直接用文件. 上代码。 这个要注意下目录结构
1>
<?php
namespace App\Http\Requests\Api;
use Illuminate\Foundation\Http\FormRequest;
class Feedback extends FormRequest
{
/**- Determine if the user is authorized to make this request.
- @return bool
*/
public function authorize()
{
return true;
}
/**
- Get the validation rules that apply to the request.
- @return array
*/
public function rules()
{
return [
'content' => 'required',
'title' => 'required',
];
}
public function messages(){
return [
'content.required' => '帐号不能为空',
'title.required' => '标题不能为空',
];
}
}
2> 控制器中使用 头部use 引入 request 类型提示注入到需要使用的控制器的方法中。 这时在请求的时候会先去验证 然后才可以进去方法内部。
use App\Http\Requests\Api\Feedback as rFeedback;
class FeedbackController extends ApiController
{
//添加反馈
public function add(rFeedback $request)
{
}
}
3> 用postmen 去测试url 会返回 如下格式。这个格式是larevel 通用的。注意 头部加X-Requested-With:XMLHttpRequest
ajax 请求会返回json。 如果是页面请求会自动返回到上一页 并且带回错误信息。
{
"message": "The given data was invalid.",
"errors": {
"content": [
"帐号不能为空"
],
"title": [
"标题不能为空"
]
}
}
4> 我的错误信息接口 和laravel 默认的格式 不一样。 所以我必须要重写返回的格式。找到文件 app\exceptions\handler.php加入如下代码 这样就可以根据自己想要的去定义错误信息的返回。
// protected function invalidJson($request, ValidationException $exception)
// {
// return response()->json([
// 'status'=> $exception->status,
// 'msg' => $exception->getMessage(),
// 'errors' => $exception->errors(),
// ]);
//}
5》最后改成了我自己需要返回的信息
{
"status": 422,
"msg": "The given data was invalid.",
"errors": {
"content": [
"帐号不能为空"
],
"title": [
"标题不能为空"
]
}
}
如果错误信息只需要返回第一条的第一个 使用如下代码: return $this->message(current($exception->errors())[0], 'error');
本人请自测试代码有效。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: