【问题标题】:Check validation rules in Yii framework在 Yii 框架中检查验证规则
【发布时间】:2013-02-02 21:36:33
【问题描述】:

我是 Yii 框架的新手,所以我试图了解它的工作方式。 对于创建表单的用户,我有以下验证规则,现在我需要检查 afterValidation() 方法,如果所有验证规则都通过了用户密码的哈希值。我不知道的是,Yii 是否有一个内置方法,如果验证规则是否通过,则返回 true 或 false。

 public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('email, password, username', 'required'),
            array('email, username, password', 'length', 'max'=>256),
            array('email, username', 'unique'),
            array('password', 'compare'),
            array('password_repeat', 'safe'),
        );
    }




 protected function afterValidate()
        {
            parent::afterValidate();
          if("VALIDATION RULES HAVE PASSED, ther is no error message")
{  
            $this->password = $this->encrypt($this->password);
}
        }
        public function encrypt($value)
        {
          return md5($value);
        }

【问题讨论】:

  • 您检查过文档吗?还是谷歌?真的很容易找到。
  • 如果我在这里问我的问题,这意味着我已经检查了文档,不仅我还检查了谷歌!聪明的
  • 因为$model->validate() 太难找了,right? 一点点努力就能走很长的路。
  • 诡计我已经尝试过,但是当我调用该函数时,我收到此错误:致命错误:达到“100”的最大函数嵌套级别,正在中止!在第 559 行的 C:\php\Yii\framework\web\auth\CWebUser.php 也许我没有以正确的方式使用 $model->validate(),任何想法

标签: php yii yii-events


【解决方案1】:

您应该使用的方法是$this->hasErrors(),因为您的表单验证已经执行。嵌套错误的可能原因是它在每个$this->validate() 之后调用您的afterValidate(),因为我认为如果执行验证并且您最终会出现无限循环,则会自动调用它

【讨论】:

    【解决方案2】:

    相反,如果将任何内容放入afterValidate(),它会在验证周期中运行,我认为您希望将您的代码放入beforeSave()

    beforeSave() 只会在您的验证规则运行且没有错误时运行。

    作为奖励:如果您只是在使用标准密码,请考虑使用Yii Password behavior。它会为你节省大量时间,并且已经被一些最优秀的 Yii 程序员彻底检查过了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-29
      相关资源
      最近更新 更多