2009-10-27 5 views
1

Est-il possible d'utiliser les composants CakePHP intégrés (par exemple: EmailComponent) en tant que classes autonomes?Utilisation de composants en dehors des contrôleurs dans CakePHP

Je sais que cela montre probablement un défaut de conception, et que je ne le fais pas le chemin du gâteau ou quelque chose, mais j'ai une classe qui n'est liée à aucun modèle/contrôleur et je veux que emails. L'importation de EmailComponent ne fonctionne pas, car il essaie de lire les informations de $this->Controller, ce qui est évidemment nul dans cette situation.

Des suggestions?

Répondre

1

Essayez d'utiliser App::import.

App::import('Component', 'Email'); 
$email = new EmailComponent(); 

Notez que vous pourriez avoir besoin de passer null comme paramètre dans le constructeur car je pense qu'il pourrait normalement être attend une référence au contrôleur. Cela peut provoquer des problèmes en ce qui concerne la EmailComponent localiser les dispositions et les vues, cependant, vous devrez jouer.

+1

Je pense que c'est exactement le problème de l'OP. Le composant EmailComponent utilise des fonctions de contrôleur sur quelques points, donc passer 'null' n'aidera pas beaucoup. – deceze

+0

@deceze: oui, frappe le clou sur la tête. – nickf

4
App::import('Core', 'Controller'); 
App::import('Component', 'Email'); 
$this->Controller =& new Controller(); 
$this->Email =& new EmailComponent(null); 
$this->Email->initialize($this->Controller); 

Voir le commentaire 11 de EmailComponent in a (cake) Shell, devrait fonctionner pour vous.

0

Je suis à peu près sûr que le meilleur moyen de faire cela est de faire du composant un fournisseur, si ce n'est pas trop pénible. Ensuite, il serait accessible n'importe où dans le code. Vous pouvez utiliser ce code dans le beforeFilter et l'utiliser comme un composant dans votre contrôleur.

App::import('Vendor', 'EmailVendor'); 
$this->EmailVendor = new EmailVendor($this); 
Questions connexes