在yii2表单验证中显示错误

时间:2016-10-23 05:41:59

标签: php validation yii2

我想在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);
        }
    }
}

1 个答案:

答案 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

的文档