2011-10-27 28 views
2

我有3個控制器,Tokens, StoresUserscakePHP複製一個函數或使用外部控制器? (DRY問題)

令牌與其他兩個模型有關,每個令牌都有一個擁有者類型和擁有者ID。

User_controller和Store_controller中還有一個名爲EmailTokenToUser的函數,它將激活鏈接發送給註冊用戶或商店的人員。

我的問題是:我應該將函數傳遞給令牌嗎? 如果是這樣,我應該怎麼稱呼它? (requestAction是一個糟糕的主意,只爲一個功能創建一個對象..)

有什麼想法嗎?

回答

2

要重用代碼,您應將其傳遞給標記的MODEL而不是控制器。這不是唯一的方式。要使用它,即使在控制器內部也不應該使用requestAction(同樣,它也是你可以通過requestAction來完成的方式)。你可以用兩種方法來做到這一點。

App:import('model', Token'); 
Token::myFunction($args); 

OR

$token = ClassRegistry:init('Token'); 
$token->myFunction($args); 

或者(如果你是高林從控制器裏面,你也可以使用)

$this->loadModel('Token'); 
$this->Token->myFunction($args); 

這是,如果你把它的令牌模型的功能。如果不與控制器的路要走,你應該做這樣的

App:import('controller', 'Tokens'); 
TokensController::myFunction($args); 

OR

App:import('controller', 'Tokens'); 
$token = new TokensController(); 
$token->myFunction($args); 

希望它可以幫助你:)

+0

大。有一個問題:如果它是相關的,我應該加載模型嗎?我不能只是'$ this-> LocalModel-> RelatedModel-> function()'? – yossi

+1

是的,你可以做到這一點,因爲它已經加載。它應該工作 – api55