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我没有收到任何错误,但验证不起作用。