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'],
    ..........
    

      

  • 相关阅读:
    ASP.NET MVC 重点教程一周年版 第二回 UrlRouting
    ASP.NET MVC 重点教程一周年版 第三回 Controller与View
    DynamicData for Asp.net Mvc留言本实例 下篇 更新
    Asp.net MVC视频教程 18 单选与复选框
    使用ASP.NET MVC Futures 中的异步Action
    ASP.NET MVC RC 升级要注意的几点
    ATL、MFC、WTL CString 的今生前世
    msvcprt.lib(MSVCP90.dll) : error LNK2005:已经在libcpmtd.lib(xmutex.obj) 中定义
    关于Windows内存的一些参考文章
    Windows访问令牌相关使用方法
  • 原文地址:https://www.cnblogs.com/itfenqing/p/6986366.html
Copyright © 2011-2022 走看看