4

ユーザーモデル、UsersController、およびユーザーモデルを使用するAccountControllerがあります(アカウントコントローラーは、アカウントの作成、ログイン、ログアウト時に使用されます)。

AccountControllerのbeforeSave関数を除いて、すべて正常に機能します。beforeSaveを使用してパスワードをハッシュしようとしていますが、機能しません(パスワードはハッシュされていない状態でデータベースに保存されます)。

public function beforeSave() {
    parent::beforeSave();   

    if (isset($this->request->data['User']['password'])) {
        $this->request->data['User']['password'] = sha1($this->request->data['User']['password']);
    }

    return true;
}

いくつかの注意:

  • 古いシステムをCakePHPに変換しているため、「sha1」を使用してパスワードをハッシュします(古いシステムはsha1を使用してパスワードをハッシュしました)
  • 保存機能が実行されていてもreturn false;(そうではないと思っていました)
  • 電話debug($this->request->data)しても何も得られない
  • UsersControllerに同じbeforeSave関数を追加しましたが、うまく機能しませんでした

私の場合、beforeSaveが呼び出されていないと思いますが、その理由がわかりません。


解決済み: beforeSave関数はモデル内に配置する必要があります。これが私のbeforeSave関数です。

public function beforeSave($options = array()) {
        parent::beforeSave();
        $this->data['User']['password'] = sha1($this->data['User']['password']);
        return true;
    }
4

1 に答える 1

3

beforeSaveはモデルコールバックなので、モデルで定義します。

于 2012-04-14T11:14:23.620 に答える