【问题标题】:Implementing a compulsory Empty Validation in Yii?在 Yii 中实施强制空验证?
【发布时间】:2014-01-11 10:43:12
【问题描述】:

我正在实现一种验证码类型,机器人检查在哪里而不是让用户填写烦人的捕获,我们创建一个名为 password_confirm 的隐藏字段,然后在检查发布的变量是否包含值时会出错。

我已经阅读过,显然最好在 beforeValidate() 事件处理程序中实现,而不是创建新的验证规则。

但是我不确定如何停止该过程以及如何在必要时返回错误消息,因为当您调用 validate() 时,它将清除所有现有的错误消息。

也不太确定我们是否可以使用场景来设置它,所以只有在注册场景中才适用。

在窗体小部件中:

<div class="row">
        <?php echo $form->hiddenField($model, 'password_confirm'); ?>
        <?php echo $form->error($model,'password_confirm'); ?>
    </div>

在 FormModel 中:

class LoginForm extends CFormModel
{
public $password_confirm; 

...

protected function beforeValidate() 
    {
    if(empty($this->password_confirm)) 
        {
            return false;
        }
        else 
        {
            return parent::beforeValidate();
        }
    }

我得到一个未定义属性的错误:所以我添加到用户模型中:

public $password_confirm; 

但是注册之后,除了应用程序日志什么都没有显示。这里可能有很多问题,我很抱歉这个令人费解的问题。

【问题讨论】:

    标签: php yii


    【解决方案1】:

    试试这个

    protected function beforeValidate() 
        {
        if(empty($this->password_confirm)) 
            {
                $this->addError('password_confirm','You crazy bot... go away');
            }
            else 
            {
                return parent::beforeValidate();
            }
        }
    

    如果使用$this-&gt;addError($attribute,$message);验证失败,您当然可以添加错误

    这里$attribute是你要添加错误对应的字段名,$message是你要显示的消息

    【讨论】:

      【解决方案2】:

      首先,您在表单中使用了一个隐藏字段,您将无法看到或正常填写它!所以将其更改为密码字段,

      你可以用特定的scenario新建你的模型并使用getScenario()检查那个场景,我也认为 beforeValidate() 是一个很好的地方,

      当您的逻辑发生时使用addError() 并手动执行return false; 以停止该过程,您可以将错误添加到特定属性,

      当验证失败时,您可以为所有出错的问题执行getErrors()

      【讨论】:

      • which you won't be able to see, or fill it normally! 正确,所以我的机器人会被骗填写字段,但普通用户不会。因此,当它被填满时,我知道它是一个机器人。
      • 你要不要填这个?!决定人:D。你说如果没有填写你想显示错误吗?
      • 不正确,读取`如果它包含一个值就会出错。`
      • 那我建议你把它设为可见的文本/密码字段,并使用javascript隐藏它。
      • 它是否可见并不重要,关键是将您的逻辑放入 beforeValidate() 并检查该逻辑并在那里执行必要的功能,这会增加错误和.. .
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 2017-03-13
      相关资源
      最近更新 更多