1

CakePhp 2.x で作成したサイトに問題があります。アカウントを登録しようとすると、フォームでフィールドのすべてのルールを確認し、前にパスワードを暗号化して保存しますが、パスワードを暗号化してからパスワード (MatchPassword) を確認して確認しますパスワードを入力すると、パスワードが 40 文字の暗号化されているため、2 つのパスワードが等しくないというエラーが返されます。

これが私のモデルコードです。この問題を解決するにはどうすればよいですか?

<?php
    //questo modello interessa lòa tabella User
    class User extends AppModel{
        public $name = 'User'; //non utilizzata nel sito è il nome del modello alla fine per migliorare la compatibilità

        public $validate = array(

            'password' => array(
                'non_vuoto' => array(
                    'rule'=> 'notEmpty',//non è vuoto metodo che eredito da appmodel
                    'message'=> 'La password non può essere vuota'  
                ),
                'min_lunghezza' => array(
                    'rule' => array('minLength',5),
                    'message' => 'La password deve contenere almeno 5 caratteri'
                ),
                'max_lunghezza' => array(
                    'rule' => array('maxLength',15),
                    'message' => 'La password deve contenere al massimo 15 caratteri'
                ),
                'password_uguale' => array(
                    'rule' => 'matchPasswords',
                    'message' => 'Not equal password'
                )
            ),
            'password_confirm' => array(
                'non_vuoto' => array(
                    'rule'=> 'notEmpty',//non è vuoto metodo che eredito da appmodel
                    'message'=> 'La password non può essere vuota'  
                )           
            )
        );


        public function matchPasswords($data){

            if ($data['password']==$this->data['User']['password_confirm']){
                return true;
            }

            $this->invalidate('password_confirm','Le due password non coincidono');
            return false;
        }


        public function beforeSave(){
            //crypt
            if (isset($this->data['User']['password'])){
                $this->data['User']['password']=AuthComponent::password($this->data['User']['password']);
            }
            return true;
        }

    }
?>
4

1 に答える 1

2

私は同様の問題を抱えていました-それがまさにあなたが求めていたものかどうかはわかりません-しかし、 beforeSave() ルールが適用される前に、モデルを検証する必要がありました.

コントローラーページからのCakePHPの検証データが役立つことがわかりました。基本的に、データを設定します

$this->ModelName->set($this->request->data);

次に、モデルの validates() メソッドを確認できます...

if ($this->ModelName->validates()) { // ...

次に、たとえば $this->Session->setFlash() を使用して、モデルを保存するか、ユーザーにエラーを表示するかを決定できます。

于 2013-08-13T19:44:58.097 に答える