【问题标题】:Extends cakephp plugin扩展 cakephp 插件
【发布时间】:2011-10-24 16:16:46
【问题描述】:

我在 cakephp 上使用 spark_plug 插件,这个插件为 cakephp 中的注册和管理员用户提供了一个身份验证-acl 系统。我想向用户的控制器添加一些新代码和功能,但我不想更改“主”插件文件。

我在想是否可以保留“主”插件控制器(未更改)“\app\plugins\spark_plug\controllers\users_controller.php”并创建一个具有所有新代码和功能的辅助控制器,一些东西像这样“\app\controllers\users_controller.php”并扩展插件“主”控制器。

这可能吗?以及如何实现?

或者你认为有没有其他方法可以做我想做的事?

谢谢!

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    您也许可以使用组合而不是继承? IE。创建一个“app\controllers\users_controller”,其中包含插件控制器的实例。 UsersController 通过存根传递任何未修改的操作,例如:

    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();
       }
    
       ...
    
    }
    

    您的问题是访问 spark_plug 用户控制器中的受保护/私有方法。但是,如果您不需要,这可能会起作用。

    【讨论】:

    • 嗨,Sc0tty,谢谢。你知道我应该从 AppController 还是 SparkPlugAppController 扩展?在这个文件中? github.com/jedt/spark_plug/blob/…
    • 嗨 lito,不客气。您应该扩展 AppController 而不是 SparkPlugAppController。如果您在插件本身中添加控制器,您只会扩展 SparkPlugAppController。
    • Sc0tty,我不知道如何按照您建议的方式安排新用户控制器,几个小时后我意识到问题可能是我不知道如何进行导入: App::import('SparkPlug.Authsome' => array('model' => 'User'));或在 App::import('SparkPlug.Authsome');
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    相关资源
    最近更新 更多