0

モデルにアタッチされたビヘイビアがあり、モデルのプロパティに応じて異なるビヘイビアを実行する必要があります。例:

class Airplane extends AppModel {
    var $actsAs = array('Flying');
}

class FlyingBehavior extends ModelBehavior {
    function flightTime(&$Model, $distance) {
        return $distance / $this->speed;
    }
}

当初は次のように設定したいと思いました

class Airplane extends AppModel {
    var $actsAs = array('Flying' => 
                      array('speed' => SOMENUM)
                  );
}

class FlyingBehavior extends ModelBehavior {
    function setup(&$Model, $settings) {
        $this->speed = $settings['speed'];
    }

    function flightTime(&$Model, $distance) {
        return $distance / $this->speed;
    }
}

ただし、各レコードspeedから列をフェッチする必要があるため、これを機能させる方法がわかりません。Airplaneこれはどのようにすればよいですか?

4

2 に答える 2

1

あなたのflightTime()方法では、元のモデルにアクセスできます。そのモデル(またはそのスーパー/親クラス)の任意のプロパティまたはメソッドを、as$Model->find( ... )またはwhatnotとして呼び出すことができます。この手法を使用して、モデルに固有の情報を取得できますが、動作が関連付けられているすべてのモデルで同じ情報が利用できることを確認してください(または、少なくともプロパティ/メソッドが利用可能であることを確認してください)。

于 2010-08-11T00:38:46.200 に答える
0

afterFind()コールバックにコードを追加することで問題を解決しました。モデルにプロパティを設定します。

$Model->property次に、Behaviorから経由してアクセスする必要があります。これは、いじる必要なしに可能であるはずですがafterFind()、残念ながら私はそれを行う方法を見つけられませんでした。

于 2010-08-14T21:39:31.460 に答える