requestAction dans cakephp
J'ai GeoIP intégré dans mon CakePHP. Maintenant, je dois l'appeler à partir de mon point de vue-fichier. Je l'ai fait dans mon contrôleur de fonction:
function getCountry($ip)
{
$this->GeoIP->countryName($ip);
}
GeoIP
est un composant.
Quand je l'ai écrit dans mon point de vue à l'échelle mondiale à quelque chose comme ceci:
$this->GeoIP->countryName('8.8.8.8')
il fonctionne bien, mais, comme je me souviens, c'est faux, pour MCV architecture. Donc la bonne façon est d'appeler requestAction
pour mon contrôleur.
Ici, j'ai 2 problèmes: - je le faire en fonction php qui se trouve dans l'affichage de fichier:
//MyView.php:
<?php
function Foo()
{
$this->GeoIP->countryName(...);
}
?>
Première erreur, c'est que $this
n'est pas disponible à l'intérieur de la fonction, la deuxième est comment appeler getCountry
de mon composant et pass besoin de l'adresse ip dans $ip
?
J'ai essayé:
echo $this->requestAction('Monitoring/getCountry/8.8.8.8');
Monitoring
est un nom de contrôleur.
Mais ce ne retourne rien sans erreurs. Quel est le bon chemin et comment appeler cette fonction?
Vous devez vous connecter pour publier un commentaire.
Quelque chose comme ceci:
Layout -> View/Layouts/default.ctp (fonctionne sur tout autre point de vue/élément ou bloc)
Element -> View/Elements/GeoIP.ctp (utilisation d'un élément de sorte que vous pouvez mettre en cache et ne demande pas de contrôleur à chaque fois)
Contrôleur -> Controller/MonitoringController.php
L'un des principes de base en MVC, c'est que vous ne devez pas utiliser de logique dans vos fichiers de vue (à l'exception de certaines conditions). Dans votre contrôleur, vous devez définir la valeur dans la vue et de l'utiliser.
Je vous absolument besoin d'appeler votre méthode après tout la logique du contrôleur, vous pouvez utiliser le beforeRender() la méthode dans votre contrôleur, et il sera appelé juste avant le rendu. Vous pouvez définir votre valeur à partir de là.
Je ne vois pas pourquoi vous aimeriez appeler une fonction de contrôleur dans l'avis, à moins que vous avez logique là-dedans. Qui doivent être déplacés dans le contrôleur.
Espère que j'ai aidé!