Bonjour,

Je suis débutant sous cakephp et j'ai un problème certainement tout bête à résoudre mais je n'ai pas réussi à trouver la réponse sur le forum.

Présentation du problème :

Je suis en train de créer un site dans lequel les internautes peuvent ajouter des dégustations à des établissements : jusque là pas de pb !

Dans mon interface d'admin, je souhaite donc pouvoir modérer les dégustations ajoutées par les internautes et lorsque je valide une dégustation, ça doit exécuter plusieurs actions :

  • mise à jour de la table Degustation (par ex : mettre à jour le champ valid => 1)
  • mise à jour de la table User (calcul de ses points, de son nouveau nombre de dégustations...)
  • mise à jour de la table Etablissement (calcul du nombre de dégustations liées à l'établissement, etc...)
    ...
    puis une redirection finale vers la page-liste avec l'ensemble des dégustations non modérées.

Quelle est la meilleure méthode pour réaliser cette partie mise à jour, à savoir l'exécution de plusieurs fonctions consécutives (actions qui ne nécessitent donc pas de vues puisque ce sont simplement des updates de tables) ?

Dans l'esprit il faudrait que mon controller Degustation ressemble un peu à ça

function admin_moderate()
{
    // Action 1 - pour mettre à jour ma table users
    $this->redirect(array('controller' => 'users','action' => 'calculate')); 
    // Action 2 - pour mettre à jour ma table etablissement
    $this->redirect(array('controller' => 'etablissements','action' => 'recalculate'));

    ...
    // Action N
    ....
    // Redirection finale
    $this->redirect($this->referer());
}

...mais là ça dirige vers la première action qui s'exécute et ça s'arrête là, sans faire ma 2ème action.
Comment exécuter mon action 1 puis mon action 2... puis mon action N ?

Après il serait possible de faire en sorte que chaque action en appelle une autre
ex :

  • mon admin_moderate redirigerait vers array('controller' => 'users','action' => 'calculate')
  • puis la fonction calculate de mon controlleur users redirigerait vers array('controller' => 'etablissements','action' => 'recalculate')
  • et finalement la fonction recalculate de mon controlleur Etablissement redirigerait vers ma page liste array('controller' => 'degustations','action' => 'moderate')...
    mais je ne trouve pas ça très "propre"... surtout si j'ai 10 mises à jour à faire !

Bref de manière générale comment puis-je faire pour faire plusieurs mises à jour consécutives dans mes différentes tables sans que ça devienne une usine à gaz et sans passer par une multitude de redirections ?
Merci pour votre aide !

2 réponses


puji
Auteur

Merci pour cette réponse aussi rapide qu'efficace ! Je viens de regarder la doc et le tuto grafikart (très bon tuto ^^) et effectivement ça répond tout à fait à ma problématique. Je n'avais pas encore été assez loin dans mon apprentissage de Cakephp et n'avais pas encore assimilé cette notion d'évènements.. Maintenant que j'ai compris le principe, il n'y a plus qu'à mettre tout ça en pratique ! Bref, merci beaucoup pour le coup de main ;-) Sujet résolu !