THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline

#1 Probleme avec un Form

(13-08-2015 11:14:24)


Bonjour a tous ,
Je suis en train de créer un module afin d'ajouter des informations complémentaires a un client,le soucis se situe au niveau du form ,en effet ,j'ai suivie a la lettre la documentation lié aux form ,il s'affiche bien ,aucun soucis ,mais lorsque je clique sur le submit ,la page se refresh et rien n'est ajouter a la BDD et aucune erreur n'est relevé ... je ne sais pas ou chercher...
Je suis Débutant ,il se peu que je sois passer a coter de quelque chose, mais je ne sais pas quoi.

Bien a vous Skoui.

Offline

#2 Re: Probleme avec un Form

(13-08-2015 11:23:58)


Bonjour Skoui,

Tout d'abord, ton formulaire doit être relié à une route que tu as définie dans ton fichier config.xml. Vérifie donc que cette route existe.

Ensuite, au niveau de la route, elle doit logiquement appeler une controller ainsi que son action, vérifie donc que tu passe bien dans l'action du controller (avec un var_dump('test'); par exemple ou avec les points d'arrêts de ton IDE si tu en a un bon).


Développeur front-end & Thelia's Lover
Thelia School | GitHub | Twitter

Offline

#3 Re: Probleme avec un Form

(13-08-2015 11:37:58)


Bonjour Mespeche,

Mon xml et ma route ont l'air correct (d'apres l'oeil d'un neophyte).
Les voila:

<forms>
        <form name="addinfo.comment.creation" class="AddInfo\Form\CommentCreation"/>
</forms>

<route id="addinfo.comment.creation" path="/addinfo/comment/creation" methods="post">
        <default key="_controller">AddInfo\Controller\AddInfoController::createAction</default>       
    </route>

Offline

#4 Re: Probleme avec un Form

(13-08-2015 12:06:58)


En effet, ça me semble correct. As-tu bien vidé ton cache après avoir déclaré ta route dans ton .xml ?


Développeur front-end & Thelia's Lover
Thelia School | GitHub | Twitter

Offline

#5 Re: Probleme avec un Form

(13-08-2015 12:13:11)


Oui ,le cache est vider apres chaque changement de route etc ... Mais rien n'y fait.

Offline

#6 Re: Probleme avec un Form

(13-08-2015 12:57:57)


Je sais que cela peut sembler bête mais ton module est-il bien actif ? De plus, as-tu bien un controller AddInfoController.php dans AddInfo/Controller ? Et ce controller contient-il bien une action createAction() ?


Développeur front-end & Thelia's Lover
Thelia School | GitHub | Twitter

Offline

#7 Re: Probleme avec un Form

(13-08-2015 13:04:12)


Oui, mon module est actif.
Oui, mon controller est bien en place,
je te met la fonction createAction()

public function createAction()
    {
        $form=$this->createForm("addinfo.comment.creation");
        $error_msg=false;
       
        try{
            $this->validateForm($form);
            return new RedirectResponse($form->get("success_url")->getData());
        } catch (formValidationException $ex) {
            $error_msg=$this->createStandardFormValidationErrorMessage($ex);
        } catch (\Exception $ex){
            $error_msg=$ex->getMessage();
        }
       
        if (false !==$error_msg){
            $this->setupFormErrorContext(
                $this->getTranslator()-trans("Comment Creation"),
                $error_msg,
                $creationForm,
                $ex
            );
            return $this->render("comment");
        }
       
    }

peut etre quelque chose m'aurais echapper.

Offline

#8 Re: Probleme avec un Form

(13-08-2015 13:08:43)


Il faut que l'on arrive à savoir si tu passes dans cette action déjà...

Avant le $form=$this->createForm("addinfo.comment.creation"); met un die('On passe bien dans la fonction');

Si ton formulaire appel bien la bonne route, alors une page blanche devrait s'afficher avec le message "On passe bien dans la fonction".


Développeur front-end & Thelia's Lover
Thelia School | GitHub | Twitter

Offline

#9 Re: Probleme avec un Form

(13-08-2015 14:41:41)


En effet on ne passe pas dans la fonction, si les route sont bonne le problemes peut venir du template ?

Offline

#10 Re: Probleme avec un Form

(13-08-2015 15:09:25)


Absolument,

Est-ce que l'argument action de ton formulaire html est bien {url path="/addinfo/comment/creation"} ?


Développeur front-end & Thelia's Lover
Thelia School | GitHub | Twitter

Offline

#11 Re: Probleme avec un Form

(13-08-2015 15:49:30)


En effet c'etait ça ... je l'ai relu des tonne de fois mais je suis toujours passer a coté, un grand merci !!
Une autre petite question ,dans le controleur ,j'ai ça "return $this->render("customer");" customer doit être le template en cas de fail, mais concretement je doit en faire quoi ? Pareil pour le success_url ,je ne sais pas a quoi ça correspond et ce que je doit mettre .

Last edited by Skoui (13-08-2015 15:58:27)

Offline

#12 Re: Probleme avec un Form

(14-08-2015 08:03:14)


Cela fais assez longtemps que je n'ai pas fait un module Thelia 2 mais d'après mon module Keyword, il faudrait que tu ais quelque chose comme ceci pour la gestion des erreurs :

if ($error_msg !== false) {
    \Thelia\Log\Tlog::getInstance()->error(
        sprintf("Erreur :", $error_msg)
    );

    $form->setErrorMessage($error_msg);
    $this->getParserContext()
        ->addForm($form)
        ->setGeneralError($error_msg)
    ;
}

// Redirection sur la page de ton formulaire
return $this->generateRedirectFromRoute(...);

Et pour la gestion de l'url de succès il faudrait ceci dans le "try" :

return $this->generateSuccessRedirect($form);

Développeur front-end & Thelia's Lover
Thelia School | GitHub | Twitter

Offline

#13 Re: Probleme avec un Form

(14-08-2015 08:53:06)


Ok Ok ,merci grandement ,ça marche toujours pas ,mais au moins il fait quelque chose ^^
Il me met "Missing or invalid data: [] , [] , [] , []" ,ça viendrais d'ou ? Controller ou Form ?

Offline

#14 Re: Probleme avec un Form

(14-08-2015 08:56:12)


On dirait qu'il ne reconnait pas tes champs, as-tu bien mis l'attribut "name" sur tes champs côté smarty ?


Développeur front-end & Thelia's Lover
Thelia School | GitHub | Twitter

Offline

#15 Re: Probleme avec un Form

(14-08-2015 09:02:27)


Lorsque je mettait ces attribut il me renvoyer une erreur "Missing or invalid data: The CSRF token is invalid. Please try to resubmit the form."

Offline

#16 Re: Probleme avec un Form

(14-08-2015 09:06:51)


Oui c'est normal, il faut que tu rajoutes aussi ceci à ton formulaire :

{form_hidden_fields form=$form}

Cela rajoute des champs cachés à ton form et notamment le système de token de sécurité.


Développeur front-end & Thelia's Lover
Thelia School | GitHub | Twitter

Offline

#17 Re: Probleme avec un Form

(14-08-2015 09:31:27)


En effet ,merci bien !
Malheureusement on revient au point de départ ,au submit ,le form me renvoie sur la page d'accueil du site client ,et rien n'est entré en BDD.
Toujours aucun message d'erreur ,d’ailleurs aucune exception n'est relever.

Offline

#18 Re: Probleme avec un Form

(14-08-2015 09:40:54)


Pourtant il y a forcément une erreur en quelque part smile

As-tu essayé de te mettre en index_dev.php pour afficher les erreurs ? Ton IDE a-t-il un déboggueur pas à pas (comme sur phpStorm par exemple)? Ca serait l'idéal...


Développeur front-end & Thelia's Lover
Thelia School | GitHub | Twitter

Offline

#19 Re: Probleme avec un Form

(14-08-2015 10:16:04)


Je suis toujours en index_dev mais non aucune erreur n'est relever ,d’ailleurs le index_dev disparaît après le submit (on arrive a la page d'accueil du site client sans le index_dev).
Et je suis sur notepad++ ,pas de debuger.

Offline

#20 Re: Probleme avec un Form

(14-08-2015 10:18:47)


Dans ce cas je vais passer le relais aux purs devs de l'équipe wink


Développeur front-end & Thelia's Lover
Thelia School | GitHub | Twitter

Offline

#21 Re: Probleme avec un Form

(14-08-2015 10:22:25)


Ok merci enormement pour ce ton aide en tout cas wink

  • gugu
  • Administrateur

Offline

#22 Re: Probleme avec un Form

(14-08-2015 11:04:20)


Bonjour,

peux-tu me dire si c'est côté back office ou front office et la classe dont tu hérites pour ton controller (BaseAdminController ou BaseFrontController) ?
Egalement me dire dans quelle page se trouve ton formulaire.
Sinon j'ai commenté un peu ton code :

public function createAction()
{
    $createForm = $this->createForm("addinfo.comment.creation");
    $error_msg=false;
    
    try{
        $form = $this->validateForm($createForm);
        
        // Ici il faudrait faire quelque chose avec tes données
        // par ex créer un nouvel objet (mais le mieux est de dispatcher un event et ... mais restons simple :) )
        $data = $form->getData();
        $monObjet = new MonObjet();
        $monObjet->setInfo($data["info"]);
        $monObjet->save();
                
        return $this->generateSuccessRedirect($createForm);
        
    } catch (formValidationException $ex) {
        $error_msg=$this->createStandardFormValidationErrorMessage($ex);
    } catch (\Exception $ex){
        $error_msg=$ex->getMessage();
    }
    
    if (false !==$error_msg){
        // ! cette fonction est uniquement dispo pour les classes héritant BaseAdminController !
        $this->setupFormErrorContext(
            $this->getTranslator()-trans("Comment Creation"),
            $error_msg,
            $createForm,
            $ex
        );
        
        // Et là il faut faire le rendu de la page sur laquelle se trouve ton form
        // Par contre si c'est un form qui par exemple sur la page d'edition d'un client 
        // Ca va coincer ! 
        return $this->render("comment");
    }
    
}

Offline

#23 Re: Probleme avec un Form

(14-08-2015 11:15:54)


Bonjour Gugu,
C'est en back office ,et mon controller hérite de BaseAdminController.
Mon formulaire est dans la page customer-edit.

Ensuite d'ou vient ton getData dans ce que tu m'as rectifier ? Comme dit précédemment j'ai suivi la doc ,je n'ai pas créer de fonction getData.

  • gugu
  • Administrateur

Offline

#24 Re: Probleme avec un Form

(14-08-2015 13:00:04)


Bon, peut-être que la doc pourrait être améliorée smile

C'est vrai que l'exemple est incomplet. il n'y a que la validation qui est présente. Mais on ne fait rien avec les données du formulaire. Il faut bien les enregistrer en base.

La méthode getData() est bien présente dans ton objet et tu peux l'utiliser.
Je pense qu'il faut adapter un peu l'instruction finale render pour que ça fonctionne :

return $this->render(
    'customer-edit', 
    array(
        'customer_id' => $this->getRequest()->get('customer_id', 0),
        'page'        => $this->getRequest()->get('page', 1),
        'page_order'  => $this->getRequest()->get('page_order', 1)
    )
);

Offline

#25 Re: Probleme avec un Form

(17-08-2015 10:50:57)


J'ai bien fait ce que tu m'as dit et au final il ne trouve pas la méthode getData(),je m'en doutais un peu et c'est pourquoi je t'avais demander ou la trouver ,afin de l'inclure dans un use.
A moins que la fonction getData ne sois implicite ,dans ce cas mon module est maudit ...