Laravel 5.5 validator 使用 request from

为了简化代码提高代码的复用性,引入 form request 去验证

  1. 项目在刚开始验证数据统一在控制器验证 贴出控制器验证代码

    $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
  2. 以上在控制器验证 已经满足项目的需求, 但是这样控制器的代码量很大 也不能提高代码的复用性。 所以本人研究使用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 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2
Toiu

这排版, 简直是教科书级的反面教材

6年前 评论
Toiu

哈哈

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!