多次实例化think\Facade\Validate类以后,验证规则会合并

浏览:75 发布日期:2019/10/12 分类:求助交流 关键字: facade 验证器 验证规则 缓存
我在base控制器中实例化了think\Facade\Validate,设置了a,b两个验证规则,
当我在User控制器中再次实例化了think\Facade\Validate,设置了aa,bb两个验证规则,但是当我查看时,会发现User控制器中的验证规则有四个,不仅有aa,bb,还有之前的a,b

PS:
1、User控制器继承了base控制器,
2、ThinkPHP版本是 v5.1.37 LTS

以下是代码示例:

base控制器:<?php

namespace app\index\controller;

use think\Controller;

class Base extends Controller
{

    public function initialize()
    {
        parent::initialize(); // TODO: Change the autogenerated stub

        $val=app('Validate');

        $val::rule(array(
            'a'=>'gt:0',
            'b'=>'min:2',
        ));

        if(!$val::check(app('Request')::param())){
            return json('请求失败');
        }
    }  
        
}
User控制器:<?php

namespace app\index\controller;

class User extends Base
{

    public function index(){

        $val=app('Validate');

        $val::rule(array(
            'aa'=>'length:1,10',
            'bb'=>'between:1,100',
        ));

        dump($val::check(array('aa'=>'25','bb'=>'123')));
        dump($val::getError());
        dump($val::instance());
        exit;
    }

}
以下是打印结果:bool(false)

string(26) "bb只能在 1 - 100 之间"

object(think\Validate)#37 (14) {
  ["alias":protected] => array(6) {
    [">"] => string(2) "gt"
    [">="] => string(3) "egt"
    ["<"] => string(2) "lt"
    ["<="] => string(3) "elt"
    ["="] => string(2) "eq"
    ["same"] => string(2) "eq"
  }
  ["rule":protected] => array(4) {
    ["aa"] => string(11) "length:1,10"
    ["bb"] => string(13) "between:1,100"
    ["a"] => string(4) "gt:0"
    ["b"] => string(5) "min:2"
  }
  ["message":protected] => array(0) {
  }
  ["field":protected] => array(0) {
  }
最佳答案
评论( 相关
后面还有条评论,点击查看>>