0

モデル内でその場でフィールドを設定しようとしているので、読み取りアクションで返されます。仮想フィールドを調べましたが、基本的に SQL クエリを実行するため、正しくありません。

この例では、ユーザーが自分のアカウントをアクティブ化したかどうかを確認するために、単純なチェックに基づいて値を返そうとしています。私のモデル内で、この関数を実行したいと思います:

public function status() {
    if ($this->field('password')) {
        return = 'active';
    } else if ($this->Ticket->field('id')) {
        return = 'pending';
    } else {
        return = 'inactive';
    }
}

意図は、$user['User']['status'] を介して私のビューでそれにアクセスすることなので、結果に基づいて CSS スタイルなどを適用できます。

しかし、 $this['User']['status'] = status() を設定する間に、今私を逃れています。

また、ユーザーのリストをさまざまな方法で読んでいるため (ページネーションを使用する場合もあれば、一度に 1 人のユーザーを使用する場合もあります)、これはコントローラーで設定したいものではありません。読み取り時にプロパティがモデルに表示されるようにします。

4

2 に答える 2

2

ロジックを実行して、afterFindコールバックの結果に追加するのはどうですか? (これは、実行後にその名前ごとにトリガーされますfind())次のようなもの:

//User model
public function afterFind($results) {

    if ($this->field('password')) {
        $results[$this->alias]['status'] = 'active';

    } else if ($this->Ticket->field('id')) {
        $results[$this->alias]['status'] = 'pending';

    } else {
        $results[$this->alias]['status'] = 'inactive';
    }
}
于 2012-05-02T13:55:35.647 に答える
0

ステータス関数を呼び出したいコールバックでこれを試してください:

$this->data[$this->alias]['status'] = $this->status();
于 2012-05-02T13:47:20.693 に答える