コンポーネント内のコントローラーのインスタンスにアクセスしたい場合は、コンポーネントのinitialize()またはstartup()メソッドを実装する必要があります。これら 2 つの特別なメソッドは、最初の引数としてコントローラーへの参照を受け取り、自動的に呼び出されます。 initialize() メソッドは、コントローラーの beforeFilter() メソッドが実行される前に自動的に呼び出され、startup() メソッドは beforeFilter メソッドの実行後に自動的に呼び出されます。何らかの理由で、コントローラーが構築操作を実行するときに start() メソッドが呼び出されたくない場合は、クラス メンバー変数 $disableStartup を true に設定できます。
コントローラーの beforeFilter() の前に何かを実行したい場合は、initialize() メソッドが最も適切な選択です。
class CheckComponent extends Object {
//Controller::beforeFilter()の前に呼び出されます
functionInitialize(&$controller) {
//後で使用するためにコントローラ参照を保存します
$this->controller = & $controller;
}
//Controller::beforeFilter()後に呼び出される
function start(&$controller) {
}
function redirectSomewhere($value) {
// コントローラーを使用するメソッド
$this- >controller->redirect($value);
}
}
?>
class CheckComponent extends Object {
//Before Controller::beforeFilter() Called
関数の初期化(&$controller) {
// 後で使用するためにコントローラー参照を保存します
$this->controller =& $controller;
}
//in Controller::beforeFilter() その後、呼び出されます
function starting(&$controller) {
}
function redirectSomewhere($value) {
// コントローラーの使用方法
$this->controller->redirect($value) ;
}
}
?>
場合によっては、コンポーネント内で他のコンポーネントを使用する必要がある場合があります。コンポーネント内でクラス メンバー変数 $components を宣言するだけで済みます (コントローラーの場合と同様)。その値はコンポーネントの配列です。使用したい名前。
class MyComponent extends Object {
// 使用する必要があるその他のコンポーネント
var $components = array('Session', 'Math');
function doStuff() {
$result = $this ->Math->doComplexOperation(1, 2);
$this->Session->write('stuff', $result);
}
}
?>
< ?php
class MyComponent extends Object {
// 使用する必要があるその他のコンポーネント
var $components = array('Session', 'Math');
function doStuff() {
$result = $ this->Math->doComplexOperation(1, 2);
$this->Session->write('stuff', $result);
}
}
?>
Useコンポーネント内またはモデルへのアクセスはお勧めできません。ただし、可能です。その場合は、使用するモデルのインスタンスを手動で生成する必要があります。以下に例を示します。
class MathComponent extends Object {
function doComplexOperation($amount1, $amount2) {
return $amount1 + $amount2;
}
function doUberComplexOperation ($amount1, $amount2) {
$userInstance = ClassRegistry::init('User');
$totalUsers = $userInstance->find('count');
return ($amount1 + $amount2) / $totalUsers;
}
}
?> ;
class MathComponent extends Object {
function doComplexOperation($amount1, $amount2) {
return $amount1 + $amount2;
}
function doUberComplexOperation ($amount1, $amount2) {
$userInstance = ClassRegistry::init('User');
$totalUsers = $userInstance->find('count');
return ($amount1 + $amount2) / $totalUsers;
}
}
?>
このセクションのコメントを参照
3.6.3.3 コンポーネント内で他のコンポーネントを使用する
翻訳
このセクションのみを表示
コメント(0)
履歴
翻訳はありませんこのセクションについてはまだです。翻訳についての詳細情報
場合によっては、コンポーネントの 1 つが別のコンポーネントを使用する必要がある場合があります。
他のコンポーネントをコントローラーに含めるのとまったく同じ方法でコンポーネントに含めることができます。 $componentsvar.
class CustomComponent extends Object {
var $name = "Custom"; // コンポーネントの名前
var $components = array( "Existing" );コンポーネントは
functionInitialize(&$controller) {
$this->Existing->foo();
}
function bar() {
// ...
}
}
?> を使用します。
class CustomComponent extends Object {
var $name = "Custom"; // コンポーネントの名前
var $components = array( "Existing" ) // コンポーネントが使用する他のコンポーネント
function input(&) $controller) {
$this->既存->foo();
}
function bar() {
// ...
}
}
?>
< ;?php
class ExistingComponent extends Object {
var $name = "Existing";
functionInitialize(&$controller) {
$this->Parent->bar();
}
function foo() {
// ...
}}
? & Gt;