Wenn Sie auf die Instanz des Controllers in der Komponente zugreifen möchten, müssen Sie die Methode „initialize()“ oder „startup()“ der Komponente implementieren. Diese beiden speziellen Methoden erhalten als erstes Argument eine Referenz auf den Controller und werden automatisch aufgerufen. Die initialize()-Methode wird automatisch aufgerufen, bevor die beforeFilter()-Methode des Controllers ausgeführt wird, und die startup()-Methode wird automatisch aufgerufen, nachdem die beforeFilter-Methode ausgeführt wird. Wenn Sie aus irgendeinem Grund nicht möchten, dass die Methode „startup()“ aufgerufen wird, wenn der Controller einen Konstruktionsvorgang ausführt, können Sie die Klassenmitgliedsvariable $disableStartup auf „true“ setzen.
Wenn Sie etwas vor beforeFilter() des Controllers tun möchten, ist die Methode initialize() die am besten geeignete Wahl.
class CheckComponent erweitert Objekt {
//Aufgerufen vor Controller::beforeFilter()
function initialize(&$controller) {
// Speichern des Controllers Referenz für spätere Verwendung
$this->controller =& $controller;
}
//Aufgerufen nach Controller::beforeFilter()
function startup(&$ controller) {
}
function restartSomewhere($value) {
// Controller-Methode verwenden
$this->controller->redirect($value);
}
}
?>
class CheckComponent erweitert Objekt {
//In Controller::beforeFilter( ) wurde vor <🎜 aufgerufen >
Funktion initialisieren(&$controller) {/ Speichern der Controller-Referenz zur späteren Verwendung$this->controller =& $controller }//Aufgerufen nach Controller::beforeFilter()Function Startup(&$Controller) {}Function RedirectSomewhere($value) {//Controller-Methode verwenden$this->controller->redirect($value);} }?>Manchmal müssen Sie möglicherweise andere Komponenten in der Komponente verwenden. Sie müssen nur die Klassenmitgliedsvariable $components in der Komponente deklarieren (genau wie in einem Controller), ihr Wert ist ein Array von Komponentennamen, die Sie verwenden möchten. class MyComponent erweitert Objekt {
// Andere Komponenten, die verwendet werden müssenvar $components = array('Session', 'Math');function doStuff() { $result = $ this->Math->doComplexOperation(1, 2);$this->Session->write('stuff', $result); }
}?>Es wird nicht empfohlen, Modelle in Komponenten zu verwenden. In diesem Fall ist die Möglichkeit jedoch nicht ausgeschlossen um manuell eine Instanz des Modells zur Verwendung zu generieren. Hier ist ein Beispiel: class MathComponent erweitert Objekt {
3.6.3.3 Andere Komponenten in Ihrer Komponente verwendenÜbersetzenNur diesen Abschnitt anzeigenKommentare (0)VerlaufFür diesen Abschnitt gibt es noch keine Übersetzung. Bitte helfen Sie mit und übersetzen Sie dies. Weitere Informationen zu ÜbersetzungenManchmal muss eine Ihrer Komponenten möglicherweise eine andere verwenden.Sie können andere hinzufügen Komponenten in Ihrer Komponente auf genau die gleiche Weise, wie Sie sie in Controller einbinden: Verwenden Sie die $componentsvar.class CustomComponent erweitert Object {
class CustomComponent extends Object {
var $name = "Custom"; // der Name Ihrer Komponente
var $components = array( "Existing" ); // die andere Komponente, die Ihre Komponente verwendet
function initialize(&$controller) {
$this->Existing->foo();
}
function bar() {
// ...
}
}
?>
< ;?php
class ExistingComponent erweitert Objekt {
var $name = "Existing";
function initialize(&$controller) {
$this->Parent->bar( );
}
function foo() {
// ...
}
}
?>
< ?php
class ExistingComponent extends Object {
var $name = "Existing";
function initialize(&$controller) {
$this- >Parent->bar();
}
function foo() {
// ...
}
}
以上就是cakephp 组件中访问控制器的实例的内容,更多相关内容请关注PHP中文网(www.php.c n)!