2016-10-23 3 views
0

Я хотел бы сделать обычную проверку в 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); 
     } 
    } 
} 
+0

Используйте '' enableAjaxValidation '=> true' в форме, а также добавьте 'if (Yii :: $ app-> request-> isAjax && $ model-> load (Yii :: $ app-> request-> post())) { Yii :: $ app-> response-> format = \ yii \ web \ Response :: FORMAT_JSON; return ActiveForm :: validate ($ model); } 'в действии часть – GAMITG

+0

, но это не получается –

+0

вы получаете ошибку? – GAMITG

ответ

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

+0

Как это отличается от того, что я опубликовал в вопросе, и он не работает –

+0

@GEOFFREYMWANGI Пожалуйста, проверьте метод * validateRegno *, я удалил запрос и условие. В твоем случае мне не нужно чувствовать. –

+0

Что происходит во время регистрации, проверяя, есть ли грузовик с аналогичным reg_no, поэтому мы не можем считать, что пустым, reg_no не является автоматическим приращением. –

Смежные вопросы