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

  [Opened] Utilisation des champs hidden dans les formulaires

Posted by Mathieu147 on 03/06/2010 12:29

Bonjour,

Mon contrôleur hérite de jControllerDaoCrud. D'habitude, quand on crée un enregistrement, après la création, on est redirigé vers l'action view.

Je voudrais rediriger vers une autre action d'un autre contrôleur. Ce n'est pas très difficile, puisque maintenant je sais comment faire :-)

Le problème c'est que l'action sur laquelle je dois rediriger a besoin d'un paramètre. Facile de passer le paramètre:

  $resp->param = array('monParamètre'=>$saValeur);

Mais c'est pour faire «transiter» la valeur du paramètre que j'ai un problème. En fait cette valeur est connue lors de l'appel à _preCreate() et je dois la ressortir lors de l'appel à _afterCreate(). Pour la stocker entre ces deux appels, j'ai utilisé un champ caché, et donc je fais ça:

  protected function _preCreate($form) {
    $form->getControl('monChampCaché')->setData($this->param('monParamètre'));
  }

Puis ça:

  protected function _afterCreate($form, $id, $resp) {
    $resp->action = 'truc~machin:bidule';
    $saValeur = $form->getData('monChampCaché');
    $resp->param = array('monParamètre'=>$saValeur);
  }

Mais ça ne fonctionne pas!? La variable $saValeur a pour valeur la clé primaire de l'enregistrement que je viens de créer.

Comment ce fait-ce?

Merci!

  [Opened] Re: Utilisation des champs hidden dans les formulaires

Reply #1 Posted by laurentj on 03/06/2010 22:41

Salut,

tu es sûr d'avoir quelque chose en faisant $this->param('monParamètre') ? Tu utilise une balise <hidden> dans ton formulaire ?

  [Opened] Re: Utilisation des champs hidden dans les formulaires

Reply #2 Posted by Mathieu147 on 03/07/2010 09:19

Bonjour,

Merci pour ta réponse.

Oui je suis sûr parce que le contenu de ce champ hidden doit être inscrit dans la base de donnée, et ça, ça fonctionne.

En plus, j'ai fait

 protected function _preCreate($form) {
   $form->getControl('unAutrechampPasCaché')->setData($this->param('monParamètre'));
 }

pour tester et mon champ avait bien la bonne valeur.

 ---------------------EDIT-----------------------

Je teste une autre méthode (qui ne marche pas non plus). J'ai fait ça:

  protected function _afterCreate($form, $id, $resp) {
    $factory = jDao::get('tralala');
    $lEnregistrementJusteCréé = $factory->get($id);
    $saValeur = $lEnregistrementJusteCréé->monParamètre;
    $resp->action = 'truc~machin:bidule';
    $resp->param = array('monParamètre'=>$saValeur);
  }

C'est pas super propre ni super optimisé, mais au moins, ça devrait fonctionner. Donc en fait j'instancie une Factory et je me sers du paramètre $id pour récupérer l'enregistrement qui vient juste d'être créé. Ensuite je vais voir son paramètre qui a été enregistré dans la BDD.

Quand je vais voir avec phpMyAdmin la valeur du paramètre dans la base de données, c'est OK, je vois la bonne valeur. Mais dans ma méthode _afterCreate() mon paramètre prend comme valeur la clé primaire de l'enregistrement qui vient d'être créé!

  [Opened] Re: Utilisation des champs hidden dans les formulaires

Reply #3 Posted by laurentj on 03/08/2010 14:17

et avec un "s" ?

  $resp->params = array('id'=>$idForm);

Et sinon, un peu HS mais pas trop : plutôt que de stocker tes champs en base, peut être pourrais tu générer directement des fichiers jforms dans un module adéquate, dans le répertoire var/overloads/ plutôt que dans le module en lui même (voir http://jelix.org/articles/fr/manuel-1.1/surcharge-de-fichiers)

Ainsi tu profites automatiquement des fonctionnalités de jforms (affichage, vérification..) en appelant simplement le bon sélecteur. Et ça éviterait deux fois moins d'accès en base...

 
Page
  1. Utilisation des champs hidden dans les formulaires