5 votes

Peut-on appeler une fonction du contrôleur à partir d'une vue dans CakePHP ?

Je veux appeler une fonction du contrôleur à partir d'une vue. Est-ce possible en Cake PHP ?

10voto

dr Hannibal Lecter Points 4512

Il est possible de le faire par l'intermédiaire de la méthode requestAction mais elle n'est pas recommandée en raison d'une légère baisse de performance. Utilisez-la à bon escient.

En tant que Xr comme indiqué dans le commentaire, l'utilisation de requestAction signifie souvent des problèmes de conception (séparation MVC).

2voto

Aziz Points 630

Oui, utiliser requestMethod avec la mise en cache

$out = Cache::read('savedincache');
if(empty($out)){
   $out = $this->requestAction('/articles/myfunction');
   Cache::write('savedincache', $out);
}

dans /app/controllers/articles_controller.php

function myfunction(){
   $out = $this->Article->find('all');
   return $out
}

2voto

UncaAlby Points 616

J'ai réussi à faire ce qui suit (CakePHP 2.3).

Supposons que vous ayez "MyController" avec une fonction publique nommée "functionToRun()".

A partir de votre fichier View :

$variable = new MyController();
$variable->functionToRun($parameter);

Notez que l'objet "$this->request" ne sera pas disponible, donc si vous avez besoin de ces données dans la fonction, vous devrez les passer en paramètre, et peut-être apporter des modifications à la fonction pour le permettre.

Je ne vais pas débattre de la question de savoir si c'est une bonne idée ou non, bien qu'il faille noter que, parfois, le bâtiment est en feu et qu'il faut l'éteindre hier. Je concède que la conception générale aurait probablement dû être meilleure, mais nous n'avons pas le temps de reconstruire les étages un à trois simplement parce que nous avons découvert le problème lorsque nous sommes arrivés à l'étage cinq.

Si l'on me donne le choix d'enfreindre une règle, je préfère de loin enfreindre cette règle plutôt que celle qui concerne la duplication du code, qui, à ma connaissance limitée, est la seule alternative restante. La duplication du code conduit à des cauchemars bien pires en matière de maintenance.

0voto

aldo Points 1

requestAction est une mauvaise idée, si vous avez besoin de définir une variable à partir du contrôleur, je pense qu'il est préférable de déplacer le code du contrôleur dans le modèle et ensuite dans app_controller.php, à partir de beforeFilter vous pouvez utiliser votre modèle et appeler votre fonction à partir de votre modèle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X