Есть два компонента, которые зависят друг от друга
class Comp1 extends CApplicationComponent {
public function init() {
parent::init();
// зависимость от Comp2
Yii::app()->comp2;
}
}
class Comp2 extends CApplicationComponent {
public function init() {
parent::init();
// зависимость от Comp1
Yii::app()->comp1;
}
}
следующий код генерирует ошибку ‘Undefined property: CApplication::$comp1’
Yii::app()->comp1;
чтобы реализовать такую зависимость компонентов, необходимо код зависимости вынести в отдельный метод и инициализировать компоненты вручную, например:
class MyApplication extends CWebApplication {
/**
* @see CWebApplication::init()
*/
protected function init() {
parent::init();
// init both components
$this->comp1;
$this->comp2;
// process operations depends from comp2
$this->comp1->dependsFromComp2();
}
}
какой подход в реализации такой задачи является правильным в Yii?
Посмотрел еще раз. Оказывается, ошибку то он мне не выдает, но и компонент componentA a в методе init() класса componentB он не создает К сожалению, метод init() вызывается в тот момент, когда в классе приложения и из массива конфигураций модуль удален, и в массив объектов он еще не помещен…