Event & Behavior

Bonjour à tous,

j’aimerais créer un système de hook avec Yii mais je ne vois pas trop comment faire, d’après ce que j’ai compris il faudrait utiliser Event & behavior pour arriver à mes fin, mais je ne vois pas trop comment y arriver.

Enfaite je veux créer un site à base de module, je m’explique : j’aurais un site (dans /protected/) qui bougera que très peut.

Et je veux que mes modules viennent se gréffer tout seul par dessus.

Exemple :

Imaginons que je veuille créer un nouvelle article, lorsque je l’ai ajouté, je pourrais le visualiser.

Et bien j’aimerais que sur la page de visualisation mon module de commentaire se “reveille”.

En gros, j’ajoute une option à ma méthode afficherCommentaire qui dit : “réveillle toi sur le controller Article à l’action view”

Tu as jeté un coup d’oeil à la doc ?

http://www.yiiframework.com/wiki/327/events-explained/

http://www.yiiframework.com/wiki/44/behaviors-events/

Justement, j’ai le sentiment qu’il faut que j’utilise Behaviors et events mais je ne vois pas trop comment. J’ai l’impression qu’il me manque un truc pour comprendre le tuto

2 tutos qui correspondent plus à ce que tu cherches à faire :

http://www.yiiframework.com/doc/guide/1.1/en/basics.component

http://www.databaseskill.com/924927/

[b]Events et Behaviours dans Yii sont une simple intégration du Pattern Observer. Commence par bien comprendre le fonctionnement général de ce Pattern :

[/b]

http://julien-pauli.developpez.com/tutoriels/php/observer-spl/

http://fr.wikipedia.org/wiki/Observateur_(patron_de_conception)

http://jonathankowalski.fr/blog/2011/06/design-pattern-observateur/

Une fois que tu auras bien assimilé le concept général, ce sera plus simple de comprendre son intégration particulière dans Yii.

Merci beaucoup louis, j’ai beaucoup mieux compris ces histoires d’évènements (grâce au blog de Johathan kowalski).

Cela correspond presque à ce que je recherche. Le système de notification c’est exactement ça qu’il me faut mais j’ai l’impression qu’il me manque un concept (peut-être un pattern ?) pour réaliser ce que je veux, je m’explique :

  • Le fait que la classe se réveille toute seul avec l’action update c’est parfait, mais elle s’appel à chaque fois que je fais un notify alors que j’aimerais qu’elle se reveille uniquement sur un nom de méthode bien particulier. Exit-il un patern qui permet de faire cela ?

Imagine que j’ai une classe Api qui gère des accès une api distante avec cURL. Si ma méthode est create, il faut que ma requete soit de type POST (donc que je dise a la classe curl Reveille toi pour une requête post) et si la méthode est un delete il faut préciser a curl de configurer sa requête de type DELTE. (je sais pas si je suis très clair)

  • Ensuite ce qui est embêtant c’est que c’est à toi de dire : tu va attacher tels ou tels classe, pour mon cas j’aimerais que toutes les classes (enfin mes modules dans yii) soit attentif à tout les appels de notify et ne se reveille que si la classe et la méthode correspond à ce qu’il attend.

Un petit peut comme lorsque je créer un nouveau modèle sur Yii, je créer une méthode beforeSave() qui viens gréfer toute seul avant la sauvegarde en BDD

En tout cas merci pour ce pattern que j’ignorais, cela va grandement améliorer ma façon de programmer

De rien : faire de la POO, c’est comme jouer aux échecs, il faut connaître un grand nombre de “coups”, c’est à dire apprendre les Patterns.

Dans les frameworks, tu trouves la plupart des Patterns déjà intégrés, mais c’est important de bien comprendre leur fonctionnement pour savoir les utiliser.

Je te conseille ce livre, qui est excellent :

que tu peux télécharger en PDF ici :

http://www.ycit-he.org/files/Resources/PHP%20Objects,%20Patterns,%20and%20Practice.pdf

Dommage qu’il soit en anglais, j’ai beaucoup de mal de comprend un concept aussi pointu quand ce n’est pas ma langue maternel !

Sinon tu aurais une idée pour mon problème ?

à vrai dire, je ne pense pas que tu aies besoin des notifications pour tes exemples.

dans la méthode qui t’intéresse, tu as juste à instancier la classe qui t’intéresse, et à appeler sa méthode… C’est tout ce qu’il y a de plus classique.

Exemple :


class Api


public $curl;


public function __construct($arg) {

  .

  .

  .

  $this->curl = new Curl;

}


.

.

.


public function actionCreate( params )

{

   ...


   $this->curl->postReq(params);

}


public function actionDelete ( params )

{

   ....

   $this->curl->delete( params )

}




C’est vraiment la base en POO, c’est ce qu’on appelle une composition :

http://julien-pauli.developpez.com/tutoriels/php/liaisons-uml/#LIV

(je te conseille de lire toute la page, c’est en français)

Bref, concentre toi sur l’apprentissage de la POO et de l’UML. Après, ce sera beaucoup plus facile pour toi de prendre en main un framework.

Pour PHP, en français :