2011-10-24 132 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