Yii2 如何使复选框变为必填项不起作用

3

这是我的表单:

<?php $form = ActiveForm::begin(); ?>

<?php echo $form->field($invite, 'email')->textInput([
    'id' => 'register-email', 
    'placeholder' => Yii::t('UserModule.views_auth_login', 'email')]);
?>

<?php echo $form->field($invite, 'check')->checkbox([
    'id' => 'check', 
    'uncheck' => null])->label(
            Yii::t('UserModule.views_auth_login', 'I have read and accept') . ' <a href="#">' 
            . Yii::t('UserModule.views_auth_login', 'Terms & Conditions') . '</a> ' 
            . Yii::t('UserModule.views_auth_login', 'and') 
            . ' <a href="#">' . Yii::t('UserModule.views_auth_login', 'Privacy Policy') 
            . '</a>' . '.');
?>
    <hr>

    <?php
         echo \humhub\widgets\AjaxButton::widget([
            'label' => Yii::t('UserModule.views_auth_login', 'Register'),
            'ajaxOptions' => [
            'type' => 'POST',
            'beforeSend' => new yii\web\JsExpression('function(){ setModalLoader(); }'),
            'success' => 'function(html){ $("#globalModal").html(html); }',
            'url' => Url::to(['/user/auth/login']),
        ],
        'htmlOptions' => [
            'class' => 'btn btn-primary', 'id' => 'registerBtn'
        ]
    ]);
    ?>

<?php ActiveForm::end(); ?>

规则:

public function rules()
{
    return [
        [['email'], 'required'],
        [['email'], 'unique'],
        [['email'], 'email'],
        [['email'], 'unique', 'targetClass' => \humhub\modules\user\models\User::className(), 'message' => Yii::t('UserModule.base', 'E-Mail is already in use! - Try forgot password.')],
        [['check'], 'required'],
        [['check'], 'compare', 'compareValue' => 1, 'message'=>'bla-bla-bla'],
    ];
}

如何使我的表单仅在'email'不为空且有效以及'check'被选中时才有效?现在的问题是'check'没有通过验证。谢谢。


删除 'uncheck' => nullcompare 规则,看是否会有任何不同。 - Kostas Mitsarakis
嗨Kostas,它不能正常工作。 - max
2个回答

4

删除compare规则,并按如下更新required规则。

[['check'], 'required', 'requiredValue' => 1, 'message'=>'bla-bla-bla'],


这对我来说是有效的,使用Yii2 v~2.0.14"dektrium/yii2-user": "^0.9.14"规则验证器。 - Ibrahim.H

0
尝试以下操作:
在您的模型中添加此方法:
public function validateCheckWithEmail($attribute, $params) 
{
    if (empty($this->check) && !empty($this->email) && $this->validateAttribute($this, 'email')) {
        $this->addError($attribute, $this->getAttributeLabel($attribute).' field cannon be empty.');
    }
}

在你的规则中添加:
[['check'], 'validateCheckWithEmail', 'skipOnEmpty' => false, 'skipOnError' => false],

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接