2016-07-13 10 views
0

私のYii2アプリケーションでは、このフィールドに空白があるかどうかをチェックするカスタム検証メソッドを使用して私が入力したユーザー名のフィールドを検証しようとしています。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!'); 
       } 

      }, 
     ], 
    ], 
    } 

問題は機能しません。レコードはいくつかの空白で保存されています。ビューで

これがフィールドです:

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

あなたは[フィルタ](http://www.yiiframework.com/doc-2.0/guide-tutorial-core-validatorsを試してみました。 html#filter) – dod29

+0

'user_username'を' フィールド($ model、 'username') - > textInput(['class' => 'フォームコントロール'、 'オートコンプリート' => 'オフ' 'placeholder' => 'Username']) - >ラベル(FALSE); ?> ' – vishuB

+0

ユーザー名またはパスワードに空白が含まれているとエラーが発生しますか?または白いスペースを置き換えたいですか? –

答えて

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

この方法は正しいですが、私はそれが私が書く方法ではないと思います検証。私は、あなたの関数で 'filter'のような他のメソッドを試して、フィールド 'username'が現れた他のルールを編集しました。私はユーザー名フィールドの操作を行っていると確信しています(私は自分のビューにコードの部分を投稿しました)。しかし、なぜそれが検証されないのかわかりません。 – giovaZ

+0

フロントエンド検証はありますか? –

+0

また、どのようにvalidateメソッドを使用しているかを表示できますか? –