Я использую плагин spark_plug на cakephp, этот плагин обеспечивает систему аутентификации-acl для регистрации и администрирования пользователей в cakephp. Я хочу добавить новый код и функции в пользовательский контроллер, но я не хочу менять "основные" файлы плагинов.
Я подумал, можно ли оставить "основной" контроллер плагина как он (без изменений) "\app\plugins\spark_plug\controllers\users_controller.php" и создать дополнительный контроллер со всем новым кодом и функциями, что-то вроде этого " \app\controllers\users_controller.php" и расширяет "основной" контроллер плагина.
Это возможно? и как этого добиться?
Или вы думаете, есть ли другой способ сделать то, что я хочу?
Спасибо!
Ответ 1 · Sc0ttyD
Возможно, вы могли бы использовать композицию, а не наследование? т.е. создайте "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. Но если вам это не нужно, это может сработать.