我正在使用验证码类型,机器人检查在哪里,而不是让用户填写恼人的捕获,我们创建一个名为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;
但是在注册之后,它除了应用程序日志之外没有显示任何内容。这里可能存在许多问题,对于这个令人费解的问题我感到抱歉。
答案 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()
进行验证