0

私は 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);
        }
4

2 に答える 2

2

フォームの検証はすでに実行されているため、使用する必要があるメソッドは$this->hasErrors()です。ネストエラーの考えられる理由は、検証が実行されて無限ループに陥った場合にこれが自動的に呼び出されると思うのでafterValidate()、それぞれの後に呼び出しているためです。$this->validate()

于 2013-02-03T01:42:55.920 に答える
1

代わりに、検証サイクルで実行される に何かを入れる場合afterValidate()は、コードを に入れたいと思いますbeforeSave()

beforeSave()検証ルールが実行され、エラーがない場合にのみ実行されます。

おまけとして: 標準的なパスワード処理を行っているだけの場合は、Yii Password ビヘイビアーの使用を検討してください。これにより多くの時間を節約でき、すでに最高の Yii プログラマーによって徹底的にチェックされています。

于 2013-02-03T02:45:11.503 に答える