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ì.

È stato utile?

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:

Documentazione

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'));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top