#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’);