Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] jEvent : lire les données postées dans un listener

Posted by foxmask on 09/04/2008 22:13

Bonsoir, utilisant jcommunity, avec mon propre Dao (avec plus d'infos pour l'utilisateur, telle son adresse), au moment où je valide le formulaire account, la méthode "save" de la class account.classic.php ligne 119 envoi un Event :

 jEvent::notify('jcommunity_check_before_save_account', array('form'=>$form));

ensuite dans mon module users j'ai le listener suivant :

 class usersListener extends jEventListener{
   
   function onAuthNewUser ($event) {
        $event->Add(array('canlogin'=>($event->getParam('user')->status > 0))); // >0 == VALID or MODIFIED
   }
   
   function onjcommunity_check_before_save_account ($event) {
        $form = $event->getParam('form');
        echo "<pre>";        
        print_r($form);
        echo "</pre>";
        die("!!");
   }
 }

le problème est que je ne sais pas comment lire les infos postées dans le formulaire account dans un listener (je n'ai pas trouvé dans la doc :/ ), infos que j'aurai pu lire classiquement dans un controller avec un simple

 $address = $this->param('address');

par exemple

ps : par ailleurs, est-ce le bon endroit (le listener) pour ajouter des traitements de vérification d'un part et sur un onjcommunity_save_account des traitements de mise à jour d'autre part, ou bien il est plus propre de mettre des traitements ailleurs (et où?) ? merci pour ces précisions.

Cdt.


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] Re: jEvent : lire les données postées dans un listener

Reply #1 Posted by laurentj on 09/04/2008 23:40

je ne sais pas comment lire les infos postées dans le formulaire account

non, on ne récupère pas les données d'un formulaire jforms en faisant $this->param, mais en appelant la méthode getData du formulaire.

Voir la doc de référence de l'objet jFormsBase

  [Opened] Re: jEvent : lire les données postées dans un listener

Reply #2 Posted by foxmask on 09/05/2008 09:54

(re)bonjour,

Comme je suis tenace j'ai reparcouru la doc pour tomber là dessus

donc cela donne par exemple :

 class usersListener extends jEventListener{
  function onjcommunity_check_before_save_account ($event) {
   $form = $event->getParam('form');
   echo $form->getData('nickname');
  }
 }

@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] Re: jEvent : lire les données postées dans un listener

Reply #3 Posted by foxmask on 09/05/2008 09:58

ps : par ailleurs, est-ce le bon endroit (le
listener) pour ajouter des traitements de
vérification d'un part et sur un
onjcommunity_save_account des traitements de mise
à jour d'autre part, ou bien il est plus propre de
mettre des traitements ailleurs (et où?) ?
merci pour ces précisions.

par contre pourriez vous m'éclairer sur ces petites questions : est-ce que la business logic dans un listener à sa place ou pas ;)

merci.


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] Re: jEvent : lire les données postées dans un listener

Reply #4 Posted by foxmask on 09/05/2008 17:40

finalement, dans mon listener j'ai fait un

 function onjcommunity_check_before_save_account ($event) {
     $form = $event->getParam('form');
     jClasses::inc('users~maps');
     $address = new Maps();        
     $address->getAddress($form);
 }

et ma class Maps ( modules/users/class/maps.class.php )

contient une interrogation de Googlemap pour obtenir les coordonées de l'utilisateur et les sauvegarder dans la base.

est-ce propre comme cela ?

cdt.


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] Re: jEvent : lire les données postées dans un listener

Reply #5 Posted by laurentj on 09/06/2008 15:46

Salut,

mettre de la logique metier dans un listener, ça ne me gène pas. Donc tu fais comme tu le sens. Ça dépend ce que tu y fais dans ce listener. Si il est interressant de réutiliser le code métier qui est dedans, dans d'autres circonstances, alors vaut mieux mettre ce code métier dans une classe spécifique qu'appelera ton listener, comme tu as fait dans ton dernier exemple.

Par contre, passer complètement un objet formulaire (qui en principe est plutôt lié au controleur) à une classe métier, ça me gène.

Une classe métier ne devrait avoir en paramètre que des données métiers, des données brutes. J'aurais plutôt fait un

   $address->getAddress($form->getAllData());

si on a besoin vraiment de toutes les données, ou donner directement les quelques infos dont a besoin la classe

   $address->getAddress($form->getData('foo'), $form->getData('bar'));

Ainsi, cette classe maps peut être réutilisée en toute circonstance, même quand les données ne viennent pas d'un formulaire.

 
Page
  1. jEvent : lire les données postées dans un listener