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

#cakephp

#cakephp

Вопрос:

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

Я подумал, возможно ли оставить «основной» контроллер плагина как есть (без изменений) «apppluginsspark_plugcontrollersusers_controller.php » и создайте вторичный контроллер со всем новым кодом и функциональными возможностями, что-то вроде этого «appcontrollersusers_controller.php » и расширяет плагин «main» controller.

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

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

Спасибо!

Ответ №1:

Возможно, вы могли бы использовать композицию, а не наследование? Т.е. Создайте «app controllers users_controller», внутри которого есть экземпляр контроллера плагина. Пользовательский контроллер выполняет любые неизмененные действия через заглушки, например:

 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. Но если вам это было не нужно, это может сработать.

Комментарии:

1. Привет, Sc0tty и спасибо. знаете ли вы, должен ли я расширяться от AppController или SparkPlugAppController? как в этом файле? github.com/jedt/spark_plug/blob /…

2. Привет, Лито, всегда пожалуйста. Вы должны расширить AppController, а не SparkPlugAppController. Вы могли бы расширить SparkPlugAppController только в том случае, если вы добавляете контроллер в сам плагин.

3. Sc0tty, я не смог выяснить, как организовать новый пользовательский контроллер так, как вы предложили, через пару часов я понял, что проблема может заключаться в том, что я понятия не имею, как выполнить import: App::import(‘SparkPlug. Authsome’ => array(‘модель’ => ‘Пользователь’)); или в App::import(‘SparkPlug. Authsome’);