Heim  >  Artikel  >  Backend-Entwicklung  >  Instanz des Zugriffscontrollers in der Cakephp-Komponente

Instanz des Zugriffscontrollers in der Cakephp-Komponente

黄舟
黄舟Original
2016-12-20 09:57:431213Durchsuche

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üssen
var $components = array('Session', 'Math') ;

function doStuff() {
$result = $this->Math->doComplexOperation(1, 2);
$this->Session->write('stuff ', $result);
}

}
?>

class MyComponent erweitert Objekt {

// Andere Komponenten, die verwendet werden müssen

var $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 {
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 erweitert Objekt {

function doComplexOperation($amount1, $amount2) {

return $amount1 + $amount2;

}

function doUberComplexOperation ($amount1 , $amount2) {

$userInstance = ClassRegistry::init('User');

$totalUsers = $userInstance->find('count');

return ($amount1 + $amount2) / $totalUsers;

}

}

?>

Siehe Kommentare zu diesem Abschnitt

3.6.3.3 Andere Komponenten in Ihrer Komponente verwenden

Übersetzen

Nur ​​diesen Abschnitt anzeigen

Kommentare (0)

Verlauf

Für diesen Abschnitt gibt es noch keine Übersetzung. Bitte helfen Sie mit und übersetzen Sie dies. Weitere Informationen zu Übersetzungen

Manchmal 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 {
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() {
  // ...
}
}
?>

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)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn