簡體   English   中英

比較規則yii2無法正常工作

[英]Compare rule yii2 doesn't work correctly

我有這樣的規則方法:

public function rules()
{
    return [
        [['username', 'email', 'password'],'filter', 'filter' => 'trim'],
        [['username', 'email', 'password'],'required', 'message' => '{attribute} can not be empty'],
        ['username', 'string', 'min' => 2, 'max' => 255],
        ['password', 'string', 'min' => 6, 'max' => 255],
        ['password_repeat', 'required', 'message' => 'This field can not be empty'],
        ['password_repeat', 'compare', 'compareAttribute'=>'password', 'message'=>"Passwords don't match", 'skipOnError' => true],
        ['username', 'unique',
            'targetClass' => User::className(),
            'message' => 'This name is already used.'],
        ['email', 'email'],
        ['email', 'unique',
            'targetClass' => User::className(),
            'message' => 'This name is already used.'],
    ];
}

我的視圖代碼是這樣的:

<?php $form = ActiveForm::begin(['action' => 'login/register']); ?>
        <?= $form->field($registration, 'username',
            ['template' => '<div class="uk-form-row">
                                {input}{error}
                                </div>'])
            ->textInput(['id' => 'register_username', 'class' => 'md-input']) ?>

        <?= $form->field($registration, 'password',
            ['template' => '<div class="uk-form-row">
                            {input}{error}
                            </div>'])
            ->passwordInput(['id' => 'register_password', 'class' => 'md-input']) ?>

        <?= $form->field($registration, 'password_repeat',
            ['template' => '<div class="uk-form-row">
                            {input}{error}
                            </div>'])
            ->passwordInput(['id' => 'register_password_repeat', 'class' => 'md-input']) ?>

        <?= $form->field($registration, 'email',
            ['template' => '<div class="uk-form-row">
                            {input}{error}
                            </div>'])
            ->textInput(['id' => 'register_email', 'class' => 'md-input']) ?>
        <div class="uk-margin-medium-top">
            <button class="md-btn md-btn-primary md-btn-block md-btn-large">Sign in</button>
        </div>
        <?php ActiveForm::end(); ?>

當我填寫所有給定的字段時,我會遇到一個錯誤:即使第一次密碼正確,重復密碼時Passwords don't match 我的驗證規則是否有問題,還是Yii Validator中的錯誤?

UPD:我已經嘗試過'skipOnError' => true 我找到它作為類似問題的答案,但它仍然無法正常工作。

UPD:我在控制台中做了一些驗證:

var a = $('#register_password')
undefined
a.val()
"Halloha"
var b = $('#register_password_repeat')
undefined
b.val()
"Halloha"

但是它仍然顯示Passwords don't match錯誤消息

嘗試使用這樣的規則

 // validates if the value of "password" attribute equals to that of 
 ['password', 'compare', 'message'=>"Passwords don't match"],

它會自動將密碼值與屬性password_repeat進行比較,而不是按照文檔中說明的其他順序進行操作。

http://www.yiiframework.com/doc-2.0/guide-tutorial-core-validators.html#compare

嘗試避免在密碼輸入中輸入ID(ID由yii2自動生成)

 <?= $form->field($registration, 'password',
        ['template' => '<div class="uk-form-row">
                        {input}{error}
                        </div>'])
        ->passwordInput(['class' => 'md-input']) ?>

<?= $form->field($registration, 'password_repeat',
        ['template' => '<div class="uk-form-row">
                        {input}{error}
                        </div>'])
        ->passwordInput([ 'class' => 'md-input']) ?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM