Cakephp コンポーネントのアクセス コントローラーのインスタンス

黄舟
リリース: 2023-03-03 16:36:01
オリジナル
1214 人が閲覧しました

コンポーネント内のコントローラーのインスタンスにアクセスしたい場合は、コンポーネントの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;

& lt;? PHP

クラス Extends Object {

var $ name = "existing"; ->Parent->bar();

}

function foo() {

// ...

}

}

上記は、cakephp コンポーネントのコントローラーにアクセスするインスタンスです。 、その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート