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

于 2010-08-11T00:38:46.200 回答
0

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

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

于 2010-08-14T21:39:31.460 回答