2016-07-13 6 views
0

In meiner Yii2-Anwendung versuche ich ein Feld zu validieren, das ich benutze für die Eingabe des Benutzernamens mit einer benutzerdefinierten Validierungsmethode, die überprüft, ob dieses Feld Leerzeichen enthält.Yii2 validate username

class SomeModel extends Model 
{ 
    public $username; 
    public $email; 
    public $password; 

    public function rules() 
    { 
    return 
    [ 
     // Other rules 
    [ 
      [ 
       'username', 
       'password', 
      ], 
      function ($attribute, $params) 
      { 
       if (preg_replace('/\s+/', '', $this->attribute)) { 
        $this->addError($attribute, 'No white spaces allowed!'); 
       } 

      }, 
     ], 
    ], 
    } 

Das Problem, das nicht funktioniert. Datensätze werden mit einigen Leerzeichen gespeichert.

Aus Sicht ist dies das Feld:

<?= $form->field($model, 'username')->textInput(['class' => 'form-control', 'autocomplete' => 'off', 'placeholder' => 'Username'])->label(FALSE); ?> 
+0

Haben Sie versucht, [Filter] (http://www.yiiframework.com/doc-2.0/guide-tutorial-core-validators. html # filter) – dod29

+0

ändere 'user_username' in' username' wie ' field ($ modell, 'username') -> textInput (['class' => 'form-control', 'autocomplete' => 'off', 'Platzhalter' => 'Benutzername']) -> Label (FALSE); ?> ' – vishuB

+0

Sie möchten einen Fehler ausgeben, wenn der Benutzername oder das Passwort Leerzeichen enthält? Oder möchten Sie die weißen Felder ersetzen? –

Antwort

1
class SomeModel extends Model 
{ 
    public $username; 
    public $email; 
    public $password; 

    public function rules() 
    { 
    return 
    [ 
     // Other rules 
    [ 
      [ 
       'username', 
       'password', 
      ], 
      function ($attribute, $params) 
      { 
       //returns true/false (preg_replace returns the string with replaced matched regex) 
       if (preg_match('/\s+/',$this->attribute)) { 
        $this->addError($attribute, 'No white spaces allowed!'); 
       } 

      }, 
     ], 
    ], 
    } 
+0

Die Methode ist richtig, aber ich denke nicht, es ist die Art, wie ich schreibe Validierung. Ich habe andere Methoden wie "Filter" mit Ihrer Funktion ausprobiert und die anderen Regeln bearbeitet, wo das Feld "Benutzername" erschien. Ich bin sicher, dass ich die Operationen im Feld Benutzername (ich habe den Teil des Codes in meiner Sicht veröffentlicht) bin. Aber ich weiß nicht, warum es nicht validiert. – giovaZ

+0

Haben Sie eine Frontend-Validierung? –

+0

Können Sie auch zeigen, wie Sie die Validierungsmethode verwenden? –