Dove mettere la classe genitore controller in CakePHP?
-
02-07-2019 - |
Domanda
Ho due controller che condividono la maggior parte del loro codice (ma devono comunque essere controller diversi). La soluzione ovvia (almeno per me) è quella di creare una classe e far ereditare i due controller da essa. Il fatto è ... dove metterlo? Ora ce l'ho in app_controller.php, ma è un po 'disordinato lì.
Soluzione
In breve, i componenti vengono utilizzati per archiviare la logica che può essere utilizzata da più controller. La directory è / app / controller / componenti. Ad esempio, se avessi una logica di utilità condivisibile, avresti un oggetto chiamato UtilComponent e un file in / app / controlers / componenti chiamato UtilComponent.php.
<?php
class UtilComponent extends Object {
function yourMethod($param) {
// logic here.......
return $param;
}
}
?>
Quindi, nelle classi del tuo controller, dovresti aggiungere:
var $components = array('Util');
Quindi chiamate i metodi come:
$this->Util->yourMethod($yourparam);
Ulteriori informazioni:
Altri suggerimenti
A proposito, se il motivo di "devono essere controller separati" sono gli URL richiesti. Ricorda che puoi utilizzare il routing:
Router::connect('/posts', array('controller' => 'posts', 'action' => 'index'));
Router::connect('/comments', array('controller' => 'posts', 'action' => 'list_comments'));