设置依赖于Cake上的行为

时间:2010-08-10 23:36:01

标签: cakephp behavior

我有一个附加到模型的行为,根据模型的某些属性,行为应该有所不同。例如:

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列。我该怎么做?

2 个答案:

答案 0 :(得分:1)

flightTime()方法中,您可以访问原始模型。您可以将该模型(或其任何超级/父类)上的任何属性或方法调用为$Model->find( ... )或诸如此类的东西。您可以使用该技术检索特定于模型的任何信息,但要确保所有附加行为的模型都可以使用相同的信息(或者至少检查属性/方法是否可用)。

答案 1 :(得分:0)

我通过向afterFind()回调添加代码解决了这个问题;在模型中设置属性。

然后我只需要通过行为$Model->property访问它。这应该是可能的,而不必干涉afterFind()但不幸的是我没有找到方法去做。