我有一个附加到模型的行为,根据模型的某些属性,行为应该有所不同。例如:
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
列。我该怎么做?
答案 0 :(得分:1)
在flightTime()
方法中,您可以访问原始模型。您可以将该模型(或其任何超级/父类)上的任何属性或方法调用为$Model->find( ... )
或诸如此类的东西。您可以使用该技术检索特定于模型的任何信息,但要确保所有附加行为的模型都可以使用相同的信息(或者至少检查属性/方法是否可用)。
答案 1 :(得分:0)
我通过向afterFind()
回调添加代码解决了这个问题;在模型中设置属性。
然后我只需要通过行为$Model->property
访问它。这应该是可能的,而不必干涉afterFind()
但不幸的是我没有找到方法去做。