私はCakePHPタスクにいくつかのコンポーネントコードを用意していますが、私はコントローラを適切な方法でブートストラップしているのかどうかはわかりません。タスクでCakePHPコンポーネントを使用する場合のコード化方法
拡張されたAppController経由でアクセスすると、正常に動作する2つのコンポーネントがあります。一方のコンポーネントにはもう一方のコンポーネントが含まれているため、他方のコンポーネントにも含まれます。
最初のコンポーネント:
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 */
}
}
私は、コマンドラインからこれを動作させるために、私はシェルとタスクを定義します。これは仕事ですが、私はそれを正しくやっているかどうかはわかりません。 BigBrother成分がそれ自身の成分のいずれかを含む、またはBigBrother成分のコントローラオフ任意の他の構成要素を参照しない場合
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();
}
}
タスクのこのタイプは、うまく機能します。ご覧のとおり、私はSessionコンポーネントのためにちょっとしたことをしなければなりませんでした。
コンポーネントやサブコンポーネントを適切に初期化するために、タスクからコンポーネントを初期化して使用する方が良いでしょうか?