Расширяет плагин cakephp

Я использую плагин spark_plug на cakephp, этот плагин обеспечивает систему аутентификации-acl для регистрации и администрирования пользователей в cakephp. Я хочу добавить новый код и функции в пользовательский контроллер, но я не хочу менять «основные» файлы плагинов.

Я подумал, можно ли оставить «основной» контроллер плагина как он (без изменений) «\app\plugins\spark_plug\controllers\users_controller.php» и создать дополнительный контроллер со всем новым кодом и функциями, что-то вроде этого « \app\controllers\users_controller.php" и расширяет "основной" контроллер плагина.

Это возможно? и как этого добиться?

Или вы думаете, есть ли другой способ сделать то, что я хочу?

Спасибо!


person lito    schedule 24.10.2011    source источник


Ответы (1)


Возможно, вы могли бы использовать композицию, а не наследование? т.е. создайте «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. Но если вам это не нужно, это может сработать.

person Sc0ttyD    schedule 24.10.2011
comment
Привет Sc0tty и спасибо. знаете ли вы, следует ли мне расширяться от AppController или SparkPlugAppController? как в этом файле? github.com/jedt/spark_plug/blob/ - person lito; 24.10.2011
comment
Привет лито, пожалуйста. Вы должны расширить AppController, а не SparkPlugAppController. Вы можете расширять SparkPlugAppController только в том случае, если добавляете контроллер в сам плагин. - person Sc0ttyD; 24.10.2011
comment
Sc0tty, я не мог понять, как организовать новый пользовательский контроллер так, как вы предложили, через пару часов я понял, что проблема может заключаться в том, что я понятия не имею, как сделать импорт: App::import('SparkPlug .Authsome' =› array('model' =› 'Пользователь')); или в App::import('SparkPlug.Authsome'); - person lito; 24.10.2011