IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Récupérer un formulaire du processForm dans une autre action [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 22
    Points : 15
    Points
    15
    Par défaut Récupérer un formulaire du processForm dans une autre action
    Bonjour

    Voila mon problème: je suis sous symfony 1.4 et j'ai un formulaire d'ajout qui se déroule en deux étapes.
    Ainsi, dans mon action processForm je récupère les données de mon 1ere formulaire d'ajout, et j'appelle une nouvelle action qui elle va s'occuper de récuperer les 1ere données saisies dans le 1er formulaire (et donc dans le processForm) pour les afficher dans le deuxieme et dernier formulaire d'ajout.

    Or je n'arrive pas a passer dans mon action mon premier formulaire. J'arrive seulement a lui passé mon sfWebRequest car quand je lui passe mon formulaire il me dis que celui ci est vide. Je ne peux donc pas recupérer mes données (il y en a deux, l'id du client et les noms de domaine)

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    protected function processForm(sfWebRequest $request, sfForm $form)
    {
    $name = $form->getName();
     
    $form->bind($request->getParameter($name), $request->getFiles($name));
     
    if($form->isValid())
    {
        //Si l'on se trouve sur le formulaire d'ajout
        if($form->isNew())
          	{	
      		$this->executeAddDomaines($request, $form);
      		$this->redirect('@add_domaines');
     
          	 }
    [...]
    }
     
    public function executeAddDomaines(sfWebRequest $request, sfForm $form)
    {	    
     
    	  $this->form = new AddDomainesForm();
     
    	  $name = $form->getName();
     
    	  $params = $request->getParameter($name);
     
              $this->list_domaines = $params;
     
    	//Association avec le template
    	 $this->setTemplate('listDomaines');
    }
    Et voici mon message d'erreur:
    Catchable fatal error: Argument 2 passed to domaineActions::executeAddDomaines() must be an instance of sfForm, none given, called in /home/webs/extranet100p100.net/htdocs/lib/vendor/symfony/lib/action/sfActions.class.php on line 60 and defined in /home/webs/extranet100p100.net/htdocs/apps/backend/modules/domaine/actions/actions.class.php on line 206
    En gros il arrive pas a récupérer les données de mon 1er formulaire.

    J'espère vraiment que vous allez pouvoir m'aider
    Merci.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    J'arrive plus a trouver mes sources, il me semble de mémoire que tu ne peux pas passer plein de paramètre dans tes actions, ducoup ce serait plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $request->setParameter('nomForm',$name);
    $this->executeAddDomaines($request);
    et tu le récupère avec get parameter dans ton execute AddDomaines


    d'ailleurs je ne comprend pas pourquoi tu exécutes l'action puis redirige vers cette même action

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 22
    Points : 15
    Points
    15
    Par défaut Réponse gototog
    Merci pour la reponse je vais tester cela dessuite.

    J'execute l'action et redirige vers le 2eme formulaire

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    J'ai testé ta solution gototog seulement il me retourne
    domaine
    lorsque que je fait mon dans ma fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    executeAddDomaines(sfWebRequest $request)
    En résumé je fais dans mon processForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $request->setParameter('nomForm',$name);
    $this->executeAddDomaines($request);
    et dans mon executeAddDomaines
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     $values = $request->getParameter('nomForm');
    print_r($values);break;
    Or le print_r me retourne
    domaine
    lorsque je l'execute ce qui ne correspond pas du tout a mes deux données saisi auparavant. J'ai failli quelque part ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 22
    Points : 15
    Points
    15
    Par défaut MAJ
    J'ai réussi a récupérer mes données de mon 1er form juste avant la reidrection mais lors de la redirection je perd ces données du coup je récupère NULL dans mon deuxieme formulaire. Comment faire ?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    je crois qu'il n'y a que moi sur cette partie du forum ^^'
    désolé je n'ai pas d'autres idées, j'ai pas le temps de tester au boulot.

    ceci dit ca me semble un peu bizar, pourquoi tu souhaites faire cette redirection a tout pris aufait?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Je crois aussi qu'il n'y a que toi

    Parce mon ajout se déroule en 2 étapes : La premiere consiste a choisir pour un client les domaines que l'on souhaite ajouter pour ensuite arrivé a un deuxieme formulaire dans lequel seront présent les domaines que l'on a ajouté avec a coté de chacun d'entre eu d'autre champs a renseigné (l'url etc..). Et la qu'on on cliquera sur "ajouter" ca ajoutera tout cela dans la BDD.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    et bien pour ton template new, l'attribut action du form doit envoyer vers l'action new_etape_2. de là t'aura aucun soucis

    en gros
    new -> submit form -> AddDomaines ->submit form

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    Mais dans tous les cas lorsque je valide le 1er formulaire je dois redirigé l'utilisateur vers le second, et donc faire un redirect, ce qui me fait perdre mes données.

    Car la procedure comme tu le vois dans mon code appelle la méthode car c'est elle qui est associé au template du 2eme form.
    Ensuite, une fois que cette action a récup les données du 1er form (ce que la j'arrive a faire), puis fait un new pour créer le 2eme formulaire associé au template, on retourne dans le if du qui va se charger de rediriger vers ce nouveau formulaire/template crée auparavant.
    Et LA paf, je perd mes données.

    C'est un peu complexe vu comme ça mais le cheminement est pas très compliqué au final.

  10. #10
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    actuellement tu fais
    form 1 -> processform --redirect--> action form2 --> form 2

    je te propose d'essayer
    form1 -> action form2 [+traitement processform?] -> form2

    sans la redirection. ton action form 2 peut inclure les traitements du premier formulaire puis afficher le second

  11. #11
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 22
    Points : 15
    Points
    15
    Par défaut
    En gros si j'ai saisi il faut que j'ai deux template personalisé pour chacun des forms et une action qui dans un premier temps récupérera les données du 1er form puis créera le deuxieme form sans avoir besoin de faire un redirect.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 22
    Points : 15
    Points
    15
    Par défaut Resolu
    Je reviens pour annoncer que j'ai trouvé la solution a mon pb en sauvegardant dans une variable de session les données de mon premier formulaire ce qui me permet de les réutiliser a ma guise dans mon deuxieme formulaire

    Je met le code au cas ou quelqu'un d'autre serait intéressé

    Sauvegarde dans mon processForm des noms de domaines saisis dans mon formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->getUser()->setAttribute('noms_domaine', $nomsDomaine);
    Récuperation de ces derniers dans ma seconde action executeAddDomaines
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $noms_domaine = $this->getUser()->getAttribute('noms_domaine');

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.4] Envoi de formulaire et utilisation dans une autre page
    Par cristelle1986 dans le forum Langage
    Réponses: 3
    Dernier message: 01/07/2014, 11h19
  2. Récupérer valeurs d'un form dans une autre page html
    Par jacopo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/02/2014, 17h25
  3. [AC-2010] Filtre sur formulaire avec copie dans une autre table
    Par alainnolahc dans le forum VBA Access
    Réponses: 1
    Dernier message: 09/10/2010, 19h26
  4. Récupérer un objet se trouvant dans une autre fonction
    Par Shinochi dans le forum Débuter
    Réponses: 4
    Dernier message: 03/10/2010, 18h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo