2010-08-10 47 views
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; 
    } 
} 

但我不知道如何使這項工作,因爲我需要從每個Airplane記錄獲取speed列。我應該怎麼做?

回答

0

我通過向afterFind()回調添加代碼解決了該問題;在模型中設置屬性。

然後我只需要通過行爲中的$Model->property來訪問它。這應該是可能的,而不必介入afterFind(),但不幸的是我沒有找到辦法。

1

在您的flightTime()方法中,您可以訪問原始模型。您可以調用該模型(或其任何超級/父級)上的任何屬性或方法,如$Model->find(...)或其他。您可以使用該技術來檢索特定於該模型的任何信息,但要確保所有與該行爲相關的模型都可以使用相同的信息(或者至少檢查該屬性/方法是否可用)。

+0

不是一個好的解決方案,因爲它迫使我查詢兩次我已有的數據。 – Aillyn 2010-08-11 21:29:55

+0

你已經擁有了它?您可以完全訪問模型。如果它作爲模型的屬性存儲,則應該能夠抓住它。 – 2010-08-11 21:56:18