2010-12-10 7 views
1

J'ai un composant qui utilise certaines classes pour faire le travail qu'il est censé faire. J'ai besoin de lui transmettre des données afin d'instancier les objets dont il aura besoin. Comment puis-je le faire?CakePHP passant les données au composant avant l'instanciation

Dois-je utiliser le rappel initialize(&$Controller, $settings = array())? Si oui, comment puis-je remplir $settings?

Répondre

3

Component::initialize est généralement un bon endroit pour le faire et la variable $settings peut être rempli par votre tableau Controller::$components:

public $components = array('Foobar' => array('baz' => 42)); 
// array('baz' => 42) will be passed as the second argument ($settings) to 
// FoobarComponent::initialize(&$Controller, $settings) 
+0

Merci. Mais l'autre problème auquel je suis confronté est que la valeur que j'ai besoin de passer, 42 dans ce cas, est en fait une valeur que je dois extraire de la base de données. Donc si j'utilise la variable, j'obtiens cette erreur 'Erreur d'analyse: erreur de syntaxe, inattendue T_VARIABLE'. –

+0

@Jon Oui, cela ne fonctionnera pas. Vous devrez le faire dans une méthode de contrôleur comme 'beforeFilter', à quel point le composant est déjà opérationnel. Vous devrez donc structurer le composant pour qu'il fasse son travail plus tard et lui transmettre les informations nécessaires après son initialisation. Vous pouvez simplement faire '$ this-> Foobar-> baz = 42' à n'importe quel point du contrôleur, ou créer une méthode de setter dans votre composant que vous appellerez du contrôleur. Regardez http://book.cakephp.org/view/996/Creating-Components pour tous les points de rappel possibles d'un composant. – deceze

+0

Merci. J'espérais vraiment le faire dans l'autre sens, mais il semble qu'il n'y ait pas d'autre choix. –

Questions connexes