Validation ActiveRecord模型内部的Yii2内联验证

Validation ActiveRecord模型内部的Yii2内联验证,validation,activerecord,yii2,Validation,Activerecord,Yii2,下面是带有内联验证规则的模型代码 namespace app\models; use Yii; class Country extends \yii\db\ActiveRecord { public static function tableName() { return 'country'; } public function rules() { return [ ...other rules

下面是带有内联验证规则的模型代码

namespace app\models;

use Yii;

class Country extends \yii\db\ActiveRecord
{
    public static function tableName()
    {
        return 'country';
    }

    public function rules()
    {
        return [
            ...other rules...
            ['pan_no', 'checkPanCardUsers', 'skipOnEmpty' => false, 'skipOnError' => false]
        ];
    }

    public function checkPanCardUsers($attribute, $params)
    {
        ...some condition ...
        $this->addError($attribute, 'custom error message');
    }
}
控制器代码

public function actionSomeAction()
{
    $model = new Country();
    if ($model->load(Yii::$app->request->post()) {
        if($model->validate()) {
            $model->save();
        }
    }
    return $this->render('country', [
        'model' => $model,
    ]);
}

但这种验证是行不通的

当然,只要在规则中使用以下内容,就会调用函数

['pan_no', 'checkPanCardUsers', 'skipOnEmpty' => false, 'skipOnError' => false]
当条件错误时,只需在函数中添加错误

public function checkPanCardUsers($attribute, $params)
{
    //...some condition ...
    if (!$this->$attribute !='test')
        $this->addError($attribute, 'custom error message');
}
嗯,奇怪,它在我的测试中完美地发挥了作用

检查您是如何创建模型的,例如创建操作:

$model = new ModelName();

现在更新了问题检查。它也不起作用。我的代码还可以,但我缺少id,所以整个验证都不起作用。你能显示你的控制器代码吗?因为我想这更多的是你如何创建模型的问题。嗯,奇怪的是,从快速查看中我看不到错误。我不知道为什么会出现这样的错误:没有定义addError()函数。如果在自定义验证中记录模型中的类,会发生什么?只是为了确保它是正确的类等。问题是正常的yii验证规则也使用此addError函数来添加错误(或者至少我非常确定它们是这样做的)。所以这些也应该有同样的问题。你的病情是否返回了正确的结果?您可以使用
die(“Blablabla”)
进行检查。如果要完全删除该条件并仅使用加法器,那么会发生什么?或者尝试使用
die($this->className())进行调试@bSoft我没有收到任何错误,但验证不起作用。