• Laravel5.1之表单验证


    一.生成一个验证类

    1.生成

    artisan make:request TestRequest
    

      

    2.生成的文件在项目Http下的Requests文件夹下

    3.默认生成的文件如下

    class TestRequest extends Request
    {
        /**
         * Determine if the user is authorized to make this request.
         *
         * @return bool
         */
        public function authorize()
        {
            return false;
        }
    
        /**
         * Get the validation rules that apply to the request.
         *
         * @return array
         */
        public function rules()
        {
            return [
                //
            ];
        }
    }
    

      

    二.添加自定义验证逻辑

    *在代码中将说明

    <?php
    
    namespace TestHttpRequests;
    
    use IlluminateSupportFacadesResponse;
    
    
    class TestRequest extends Request
    {
        //验证规则,exists下面将会有说明
        protected $rules = [
            'mid' => ['required', 'integer', 'exists:articles, id, is_active, 1, is_end, 1'],
            'page' => ['required', 'integer'],
            'content' => ['required','min:5']
        ];
    
      //验证错误信息指定,否则默认是英文
        protected $messages = [
            'mid.required' => '参数错误',
            'mid.integer' => '参数错误',
            'mid.exists' => '数据不存在,或未审核通过!',
            'page.required' => '参数错误',
            'page.integer' => '参数错误',
            'content.required' => '内容必须填写',
            'content.min' => '内容不能少于:min个字',
        ];
    
        /**
         * Determine if the user is authorized to make this request.
         *
         * @return bool
         */
        public function authorize()
        {
            return true;
        }
    
    
    
        /**
         *验证权限失败时的相应
         */
        public function forbiddenResponse()
        {
            if ($this->ajax()) {
                return response()->json(['data' => null, 'info' => '没有权限', 'status' => 0]);
            } else {
                return abort(403);
            }
        }
    
        /**
         * 验证参数失败时的响应,如果验证指定的规则未通过,response将被调用,因为errors是个数组,保存所有的验证出错信息,这儿我们取出第一条显示,比较符合我们的使用习惯
         * @param array $errors
         * @return IlluminateHttpJsonResponse
         */
        public function response(array $errors)
        {
            if ($this->ajax()) {
                $firstErrors = array_shift($errors);
                $error = $firstErrors[0];
                return response()->json(['data' => null, 'info' => $error, 'status' => 0]);
            } else {
                return abort(404);
            }
        }
    
        /**
         * Get the validation rules that apply to the request.
         *
         * @return array
         */
        public function rules()
        {
            return $this->rules;
        }
    
        /**
         * @return array
         */
        public function messages()
        {
            return $this->messages;
        }
    }
    

      

     

    验证规则的exits说明

    基本:

    exists:table,column

    这将从数据库查询,来确定是否通过

    exists:articles,id,is_active,1,is_end,1

    最终形成的SQL语句将是

    select count(*) as aggregate from `articles` where ` id` = mid的值 and `is_active` = 1 and `is_end` = 1

    如果查到数据,验证将通过,否则验证失败;需要注意的是exists中的各个值之间不要加空格,否则会形成如` is_active`这样子,导致数据库列不存在;

    控制器中只要依赖注入这个验证类就可以了;这将在请求到来后,自动验证;

    如果你不用验证类,也可以在控制器中写验证规则;

    三.自定义验证规则

    如果现有的验证规则不能满足我们的需求,我们可以自定义一个规则.

    1.新建文件夹Validate,建立一个文件TestValidate.php

    use IlluminateValidationValidator;
    
    class TestValidator extends Validator
    {
        /**
         * 注意该方法必须要以Validate开头,后面的是验证规则名称
         * 验证评论是否发表过快
         * @param $attribute
         * @param $value
         * @return bool
         */
        public function ValidateQuick($attribute, $value)
        {
            $userId = Auth::id();
            /**
             * 验证blog评论
             */
            if ($attribute === 'mid') {
                $mid = $value;
                $lastComment = app(PostRepository::class)->find($mid, $userId);
    
                if ($lastComment && $lastComment->time > time()-60*30) {
                    return false;
                }
                return true;
            }
        }
    }
    

      

    2.在AppServiceProvider的boot方法中注册该验证规则

    public function boot()
    {
            /**
             * 验证评论是否发布过快
             */
            Validator::resolver(function($translator, $data, $rules, $messages) {
                return new TestValidator($translator, $data, $rules, $messages);
            });
    }
    

      

    3.使用

    ...........
    'mid' => ['quick'],
    ..........
    

      

  • 相关阅读:
    丁夏畦同志去世
    [裴礼文数学分析中的典型问题与方法习题参考解答]4.5.7
    [数分提高]2014-2015-2第10教学周第2次课 (2015-05-07)
    [数分提高]2014-2015-2第10教学周第1次课 (2015-05-04)
    [数分提高]2014-2015-2第9教学周第2次课 (2015-04-30)
    [数分提高]2014-2015-2第9教学周第1次课 (2015-04-28)
    [数分提高]2014-2015-2第8教学周第2次课 (2015-04-23)
    2014年江西省青年科学家名单
    2014年“江西青年五四奖章”名单
    [数学杂志]AML
  • 原文地址:https://www.cnblogs.com/itfenqing/p/6986366.html
Copyright © 2020-2023  润新知