У меня есть некоторый код компонента, который я хотел бы использовать в Задаче CakePHP, но я не уверен, что правильно загружаю Контроллер.
Как упрощенная версия, у меня естьдва компонента, которые работают нормально при доступе через расширенный AppController.Один компонент включает в себя другой, потому что он вызывает другой.
Первый компонент:
class BigBrotherComponent extends Object {
var $Controller = null;
var $components = array('Sibling');
function startup(&$controller) {
$this->Controller =& $controller;
}
function doThis() {
$this->Controller->loadModel('SampleModel');
$this->Sibling->doThat();
}
}
Второй компонент:
class SiblingComponent extends Object {
var $Controller = null;
function startup(&$controller) {
$this->Controller =& $controller;
}
function doThat() {
/* Doing stuff */
}
}
Чтобы заставить меня работать с этимВ командной строке я определяю Shell и Task.Это Задача, хотя я не уверен, что я делаю это правильно.
App::import('Core', 'Controller');
App::import('Component', 'Session');
App::import('Component', 'BigBrother');
class BigBrotherTask extends Shell {
var $Controller;
var $BigBrother;
function initialize() {
$this->Controller =& new Controller();
// add session to controller, because some components access $this->Controller->Session->setFlash();
$this->Controller->Session =& new SessionComponent();
$this->Controller->Session->startup($this->Controller);
// Initialise the component
$this->WordToText =& new WordToTextComponent();
$this->WordToText->startup($this->Controller);
}
function doThat() {
$this->BigBrother->doThat();
}
}
Этот тип задачи хорошо работает, когда компонент BigBrother не включает ни одного из своих собственных компонентов, или ссылается на какой-либодругие компоненты отключены от контроллера в компоненте BigBrother.Как вы видите, мне пришлось сделать небольшую хакерскую вещь для компонента Session.
Есть ли лучший способ инициализации и использования компонентов из задач, который будет правильно инициализировать компоненты и подкомпоненты?