0

私は2つのテーブルを持っていusersますtokens.
各ユーザーにはactivatedフィールドがあり、各トークンには{id, token, user_id, created}フィールドがあります。

アプリの動作方法は次のとおりです。作成時に、アプリは-

  1. フィールドが空であることを確認してactivatedください (送信されたデータの操作を避けるため)。
  2. テーブルにトークンが作成されtokensます。

更新時に、アプリは -

  1. 新しいトークンを作成しないでください。
  2. activatedフィールドへのいかなる種類の更新も許可しません。
  3. 新しい電子メールが送信されたかどうかを確認し、送信された場合は、新しいトークンを作成し、activatedフィールドを false に設定します。

コントローラーを介してアカウントを有効にする方法と、そのためにルーターをセットアップする方法を知っています。
私が必要とするのは、主にモデル構成です。
例: トークンの作成はメソッドで行う必要があると思いますがafterSave、メソッドが更新によって呼び出されたのか、作成操作によって呼び出されたのかをどのように判断すればよいでしょうか?

助けてくれてありがとう

4

2 に答える 2

1

あなたの質問は不明です。フィールドのデフォルト値がある場合、aftersave で何かを行うのではなく、データベースに設定してみませんか? 特定の状況でのみ実行する必要がある場合は、モデルにカスタム メソッドを記述して、作成時または更新時に必要なタスクを実行します。

編集

したがって、レコードに ID がある場合、それがデータベースに存在することがわかります。したがって、簡単なことは、モデルに id フィールドがあり、それが空でないことを (任意の方法で) チェックすることです。空の場合は、レコードを作成中であることがわかり、x タスクを実行できます。そうでない場合は、y タスクを実行します。

if(isset($modelData['ModelName']['id']) && !empty($modelData['ModelName']['id'])){
    //This is an update
} else {
    //This is a new record
}
于 2011-09-02T01:28:11.947 に答える
1

ただし、フォームから保存する必要があるフィールドを指定することもできます-フィールドのホワイトリストは、 $this->save() 呼び出しで保存できます。そうすれば、ハッカーがリクエストで ID を渡すのを止めることができます。自分でコントローラーに設定してから、 $this->Token->id = あなたが持っているものは何でも、私は個人的に saveField ('activated) を組み合わせて使用​​しますこれで(単一のフィールドを保存するだけです!)。できればファット モデルが最適ですが、最初に機能するようにしてから、行き詰まった場合はリファクタリングしてください。初めて完璧な文章を書くのに多くの時間を無駄にするよりはましです。

于 2011-09-02T10:14:37.470 に答える