Bonjour,

J'ai actuellement un petit problème dont je n'arrive pas à déterminer l'origine.

Voici mon code (simplifié) :

class TestComponent extends Component {
    private $controller;
    public function __construct(ComponentCollection $collection, $settings = array()) {

    }

    public function initialize(Controller $controller) {
        $this->controller = $controller;
    }
    public function maFonction() {
        $this->controlleur->maFonction();
    }
}

Avec cet extrait de code tout bête, je n'arrive pas à appeler la fonction de mon controller depuis mon composant.
Lorsque je fais un pr($this->controller) dans la méthode initialize, je récupère bien mon controller. Cependant, lorsque j'exécute la même ligne dans ma fonction (ici maFonction()), cette ligne me retourne un array() vide.

Je n'ai aucune idée de ce qui peut remplacer ma variable $controller par un array().

Une idée ?

Merci d'avance pour l'aide apportée,

Maxime.

2 réponses


ker0x
Réponse acceptée

Pour ma part, je n'utilise pas la fonction initialize, je fait tout dans le constructeur

public function __construct(ComponentCollection $collection, $settings = array()) {
    parent::__construct($collection, $settings);
    $this->controller = $collection->getController();
}

et jusqu'à présent, ça marche plutôt bien !

Maxime M
Auteur

Merci GyZmO,

Je n'avais pas pensé à tout faire dans le constructeur (je me suis dis que si une fonction initialize existe, autant s'en servir!), mais ça marche.

Cependant après y avoir réfléchi, faire appel au controleur dans un component n'est pas réellement inscrit dans la logique de CakePHP. Du coup je vais essayer de faire autrement, en essayant de l'optimiser pour pouvoir le réutiliser dans de futur projets.

Encore merci pour ta réponse, je valide le sujet.

Bonne journée!