Php 使用「;什么时候;在嵌套的yii2每个验证器中

Php 使用「;什么时候;在嵌套的yii2每个验证器中,php,yii2,yii2-validation,Php,Yii2,Yii2 Validation,有没有办法在嵌套的EachValidator中使用when属性? 以下是我的规则,但它不起作用: [['list'], 'each', 'rule' => ['required', 'when' => function ($model) {return false;}, 'whenClient' => "function (attribute, value) {return false;}"]], 我想测试我是否可以在某些条件下避免所需的验证。 所以为了测试它,我总是说返回f

有没有办法在嵌套的EachValidator中使用when属性? 以下是我的规则,但它不起作用:

[['list'], 'each', 'rule' => ['required', 'when' => function ($model) {return false;}, 'whenClient' => "function (attribute, value) {return false;}"]],
我想测试我是否可以在某些条件下避免所需的验证。 所以为了测试它,我总是说返回false。 它只是一个测试返回语句,用于验证它是否工作

如果您查看源代码,
验证程序内部的属性
规则
从未被调用时:

if (!$validator->skipOnEmpty || !$validator->isEmpty($v)) {
    $validator->validateAttribute($model, $attribute);
}
与其父类相比,它有以下特点:

foreach ($attributes as $attribute) {
    $skip = $this->skipOnError && $model->hasErrors($attribute)
        || $this->skipOnEmpty && $this->isEmpty($model->$attribute);
    if (!$skip) {
        if ($this->when === null || call_user_func($this->when, $model, $attribute)) {
            $this->validateAttribute($model, $attribute);
        }
    }
}
实现目标的一种方法是扩展
yii\validators\EachValidator
并覆盖其
validateAttribute($model,$attribute)
方法(以及其中定义的私有属性和方法):

规则()
中使用自定义类,如下所示:

[['list'], \app\models\EachValidator::className(), 'rule' => ['required', 'when' => function ($model) {return false;}]]
如果查看源代码,
when
验证程序中
规则
的属性从未被调用:

if (!$validator->skipOnEmpty || !$validator->isEmpty($v)) {
    $validator->validateAttribute($model, $attribute);
}
与其父类相比,它有以下特点:

foreach ($attributes as $attribute) {
    $skip = $this->skipOnError && $model->hasErrors($attribute)
        || $this->skipOnEmpty && $this->isEmpty($model->$attribute);
    if (!$skip) {
        if ($this->when === null || call_user_func($this->when, $model, $attribute)) {
            $this->validateAttribute($model, $attribute);
        }
    }
}
实现目标的一种方法是扩展
yii\validators\EachValidator
并覆盖其
validateAttribute($model,$attribute)
方法(以及其中定义的私有属性和方法):

规则()
中使用自定义类,如下所示:

[['list'], \app\models\EachValidator::className(), 'rule' => ['required', 'when' => function ($model) {return false;}]]

你能不能再解释一下你到底想做什么,你说我想测试什么,如果我能在某些条件下避免必要的验证。但这并不能定义实际的问题,可能是解决问题的方法应该与当前的方法不同。请你再解释一下,你实际上在做什么,你说我想测试什么,如果我可以在某些条件下避免所需的验证。但这并不能确定实际的问题可能是解决问题的方法应该不同于当前的方法。