zoukankan      html  css  js  c++  java
  • 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'],
    ..........
    

      

  • 相关阅读:
    人件阅读笔记之三
    明日计划:团队开发Fooks第十天
    明日计划:团队开发Fooks第九天
    明日计划:团队开发Fooks第八天
    明日计划:团队开发Fooks第七天
    明日计划:团队开发Fooks第六天
    优先队列
    KMP
    django-中间件
    Ajax--参数,csrf跨站请求伪造,serialize(),上传文件formdata
  • 原文地址:https://www.cnblogs.com/itfenqing/p/6986366.html
Copyright © 2011-2022 走看看