2011-10-24 133 views
1

我在cakephp上使用spark_plug插件,這個插件爲cakephp中的註冊和管理用戶提供了一個authentication-acl系統。我想添加一些新的代碼和功能到用戶的控制器,但我不想更改「主」插件文件。擴展cakephp插件

我在想,如果可以離開「主」插件控制器(不變)「\ app \ plugins \ spark_plug \ controllers \ users_controller.php」並創建一個包含所有新代碼和功能的輔助控制器,像這樣的「\ app \ controllers \ users_controller.php」並擴展了插件「main」控制器。

這可能嗎?以及如何實現?

或者你認爲有沒有其他方法可以做我想要的?

謝謝!

回答

0

你也許可以使用組合而不是繼承?即創建一個「app \ controllers \ users_controller」,裏面有一個插件控制器的實例。該UsersController穿過孔根任何未經修改的動作,例如:在spark_plug用戶控制器內

class UsersController extends AppController { 

    ... 

    var spark_plug_users_controller; 

    ... 

    public function __construct() { 
    parent::__construct(); 

    App::import('Controller', 'SparkPlug/Users'); // this is probably wrong. 
     $this->spark_plug_users_controller = new UsersController; // as is this. 
     $this->spark_plug_users_controller->constructClasses(); 
    } 

    ... 

    //example non-overridden method 
    function login() { 
     return $this->spark_plug_users_controller->login(); 
    } 

    ... 

} 

您的問題將被訪問保護/私有方法。但如果你不需要,這可能會奏效。

+0

嗨Sc0tty和謝謝。你知道我是否應該從AppController或SparkPlugAppController擴展嗎?在這個文件中? https://github.com/jedt/spark_plug/blob/006f3d94c7173ad63a622e386101fd8f000fd210/spark_plug/controllers/users_controller.php – lito

+0

嗨lito,不客氣。你應該擴展AppController而不是SparkPlugAppController。如果要在插件本身中添加控制器,則只能擴展SparkPlugAppController。 – Sc0ttyD

+0

Sc0tty,我找不到如何按照您的建議安排新的用戶控制器,幾個小時後我意識到問題可能是我不知道如何進行導入: App :: import( 'SparkPlug.Authsome'=> array('model'=>'User'));或者在App :: import('SparkPlug.Authsome'); – lito