La vraie question est pourquoi tu veux faire ça...
Souvent ce type de demande révèle une mauvaise pratique.
Envoyé par
siriu
Par exemple lorsque je visualise la vue "liste" du controller "recette" je voudrai que dans une colonne du design apparaisse également le résultat de la méthode "lastArticles" du controller "article"
Si tu as besoin des derniers articles, c'est ton modèle qui doit te donner le résultat, pas un contrôleur. Donc dans ta méthode listeAction() de ton contrôleur Recette, tu pourrais récupérer les derniers articles depuis le modèle (= un appel de méthode, au pire avec une instanciation d'objet, 2 lignes), et l'ajouter à la vue (1 ligne).
Rien n'empêche par contre de factoriser ton code de vue dans un phtml dédié, et de l'appeler dans chacune des vues où c'est nécessaire par un simple :
echo $this->render("derniers-articles.phtml");
Le problème c'est que souvent les développeurs écrivent la logique métier dans le contrôleur, au lieu de le faire dans le modèle. C'est ainsi qu'on se retrouve avec une application difficilement maintenable, avec du code mal placé et souvent dupliqué, et qu'on a besoin d'appeler des méthodes de contrôleur dans un autre...
Le modèle est souvent perçu comme une simple couche d'accès à la base de données, alors qu'en fait c'est bien plus que cela. C'est tout l'intérêt de l'objet : embarquer la logique dans les objets métier, pas seulement traiter la persistance.
Bref, la bonne réponse à ta question est de refactoriser ton code pour ne pas avoir à faire ce genre d'appel, qui n'a pas vraiment de sens
Un contrôleur doit se contenter de jouer le chef d'orchestre :
- recevoir l'input utilisateur
- le valider et le transmettre au modèle pour traitement
- ajouter les résultats provenant du modèle dans la vue
Je le répète encore, la logique métier doit s'implémenter dans la couche métier, c'est-à-dire dans le modèle.
Partager