在Yii中实施强制性空验证?

时间:2014-01-11 10:43:12

标签: php yii

我正在使用验证码类型,机器人检查在哪里,而不是让用户填写恼人的捕获,我们创建一个名为password_confirm的隐藏字段,然后在检查发布的变量时,如果它包含值,则会产生错误。

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

但是我不确定如何停止进程以及如果有必要返回错误消息,就像调用validate()时它将清除所有现有的错误消息。

也不太确定我们是否可以使用scenarions进行设置,因此只有在寄存器场景中才适用。

表格小工具:

<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; 

但是在注册之后,它除了应用程序日志之外没有显示任何内容。这里可能存在许多问题,对于这个令人费解的问题我感到抱歉。

2 个答案:

答案 0 :(得分:1)

试试这个

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

如果使用$this->addError($attribute,$message);确认验证失败,您肯定会添加错误。

此处 $ attribute 是您要添加错误的字段名称, $ message 是您要显示的消息

答案 1 :(得分:0)

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

您可以使用特定的方案新建模型,并使用getScenario()检查该方案,我也认为beforeValidate()是一个很好的地方,

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

当验证失败时,您可以针对出错的所有内容getErrors()进行验证