2017-01-13 8 views
0

Ich habe eine benutzerdefinierte Validator-Klasse namens "EndTimeValidator" in Common \ Komponenten-Namespace erstellt.Modell benutzerdefinierte Client-Seite Validierung

Code:

namespace common\components; 

use yii\validators\Validator; 

class EndTimeValidator extends Validator 
{ 
    public function init() 
    { 
     parent::init(); 
     $this->message = 'Event EndTime must be greater than StartTime.'; 
    } 

    public function validateAttribute($model, $attribute) 
    { 
     $startDate = $model->StartDate; 
     $endDate = $model->EndDate; 

     $startTime = $model->StartTime; 
     $endTime = $model->EndTime; 

     if(($startDate == $endDate) && $startTime != "" && $endTime != "" ) 
     { 
      if(strtotime($endTime) < strtotime($startTime)) 
      { 
       $this->addError($attribute, $this->message); 
      } 
     } 
    } 

    public function clientValidateAttribute($model, $attribute, $view) 
    { 
     $startDate = $model->StartDate; 
     $endDate = $model->EndDate; 

     $startTime = $model->StartTime; 
     $endTime = $model->EndTime; 

     if(($startDate == $endDate) && $startTime != "" && $endTime != "" ) 
     { 
      if(strtotime($endTime) < strtotime($startTime)) 
      { 
       return <<<JS 
    messages.push($this->message); 
JS; 
      } 
     } 
    } 
} 

Und in Modell I enthalten zuerst diesen Weg und definiert die Validierung wie folgt:

use common\components\EndTimeValidator; 

['EndTime', EndTimeValidator::class], 

Frage aktualisiert:

Aber es ist zu geben ich unter Ausnahme:

Aufruf an eine Elementfunktion getAttributeLabel() auf einem Nicht-Objekt

I haben auf diesen link bezeichnet. Mache ich etwas falsch? Bitte führen Sie mich. Vielen Dank!

Antwort

0

Es war ein dummer Fehler. Aber ich werde diese Frage behalten, da es jemandem helfen kann.

Der Fehler wurde durch die folgende Zeile in der validateAttribute Funktion

$this->addError($attribute, $this->message); 

Ersetzen Sie die obige Zeile mit:

$model->addError($attribute, $this->message); 
1

Verwendung:

use common\components\EndTimeValidator; 

/** .... */ 

['EndTime', EndTimeValidator::class], 
+0

Dank es hat funktioniert! Aber danach gibt es mir immer noch einen Fehler. Ich habe die Frage aktualisiert. Kannst du bitte nochmal helfen? – Chinmay

+0

Bitte zeigen Sie den vollständigen Fehler und die Datei, wo es zeigt – Yupik

Verwandte Themen