ActiveRecord模型中的Yii2内联验证

时间:2015-09-29 09:15:34

标签: 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...
            ['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,
    ]);
}

但验证无效。

1 个答案:

答案 0 :(得分:2)

当然,只需在规则中使用以下内容,即可调用您的函数。

['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();