我想在yii2中进行自定义验证,但这不起作用。
我想要的是在卡车状态不是17或18时验证,例如,如果应该返回12这个错误,但总是显示错误
public function validateRegno()
{
$truck = TblTrucks::find()->where(["reg_no"=>$this->reg_no])->all();
if ($truck) {
if(!$truck->truck_status ==18 || !$truck->truck_status ==17){
$this->addError('reg_no', 'The truck is not yet cleared by customer service');
}
}
}
这些是模型规则
public function rules()
{
return [
[['reg_no', 'truck_category', 'added_by', 'truck_status', 'driver_name'], 'required'],
[['truck_category', 'added_by', 'truck_status', 'is_normal'], 'integer'],
[['added_on'], 'safe'],
[['reg_no'], 'string', 'max' => 50],
['reg_no', 'validateRegno','on' => 'create'],
}
这是我的表格
<?php $form = ActiveForm::begin(['id' => $model->formName(),
'enableAjaxValidation' => true,
//'enableClientValidation' => true,
'validationUrl' => ['truck/validate'],
]); ?>
在控制器中
(truck/validate)
public function actionValidate(){
$model = new TblTrucks();
$model->scenario = 'create';
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
if (!$model->validate()) {
Yii::$app->response->format='json';
return ActiveForm::validate($model);
}
}
}
答案 0 :(得分:0)
您的自定义验证方法应如下所示。
public function validateRegno()
{
$truck = TblTrucks::find()->where(["reg_no"=>$this->reg_no])->all();
if ($truck) {
if(!$truck->truck_status ==18 || !$truck->truck_status ==17){
$this->addError('reg_no', 'The truck is not yet cleared by customer service');
}
}
}
我希望在你的模型中,$this->reg_no
是主键字段,我的意思是自动增量字段。因此,在创建新记录时,它将是空的。
<强>编辑:强>
根据您的评论,$this->reg_no
不是模型中的主键。使用all()
检索记录时,它将返回记录数组。请参阅此链接 - http://www.yiiframework.com/doc-2.0/yii-db-queryinterface.html#all()-detail因此您必须迭代记录以检查每辆卡车的状态。
或者$this->reg_no
在表中是唯一的,您必须使用one()
方法来检索记录。它将从表中返回单个记录。请参阅one()
- http://www.yiiframework.com/doc-2.0/yii-db-queryinterface.html#one()-detail