Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 07-11-2012 11:13:40

J0r
Membre
Date d'inscription: 27-04-2012
Messages: 57

[Résolu] populate formulaire ?

Bonjour,

Je suis actuellement en train de migrer un projet Zf1 en Zf2 et je reste bloqué sur la possibilité d'effectué un populate du formulaire lorsque celui-ci est invalide pour que les données soient mise dans le formulaire avant de l'envoyer à la vue.
Est-ce qu'une fonction l'a remplacé ?

Code ZF1 :

Code:

if (!$form->isValid($_POST)) {
     $form->populate($_POST);
     //On sauvegarde le formulaire dans la vue
     $this->view->form = $form;
            
    return;
}

Code ZF2

Code:

if (!$form->isValid($_POST)) {
    //Populate ?
    return new ViewModel(Array('form'=>$form));
}

Dernière modification par J0r (08-11-2012 13:22:40)

Hors ligne

 

#2 08-11-2012 11:34:11

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Re: [Résolu] populate formulaire ?

Salut,

Les formulaires ont complètement été réécrits dans ZF 2. Il faut maintenant appeler la fonction setData.

Code:

if ($this->request->isPost()) {
    $form->setData($this->request->getPost());
}

Hors ligne

 

#3 08-11-2012 11:46:04

J0r
Membre
Date d'inscription: 27-04-2012
Messages: 57

Re: [Résolu] populate formulaire ?

Je le fait déjà mais après la validation les données ne sont plus là :

Code:

[lang=php]
//Création du formulaire
$form = new MotdepasseForm();

//Si ce n'est pas une requete POST alors on renvoi sur l'index
if (!$this->getRequest()->isPost()) {
    return new ViewModel(Array('form'=>$form));
}

//On applique les filtres et les validateurs
$formFilter = $form->prepareFilters();
$form->setInputFilter($formFilter);

//On rentre les données passées en POST dans le formulaire
$form->setData($this->getRequest()->getPost());

//On verifie les validateurs du formulaires
if (!$form->isValid($_POST)) {
    //Les données ne sont plus dans le formulaire !
    return new ViewModel(Array('form'=>$form));
}

Dernière modification par J0r (08-11-2012 11:47:05)

Hors ligne

 

#4 08-11-2012 11:58:33

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: [Résolu] populate formulaire ?

Je maitrise pas à fond les formulaires mais tu les utilises pas du tout comme il faut.

Toute la partie préparation etc ... est normalement faite automatiquement soit via ta factory soit directement depuis le formulaire si tu implémente la bonne classe. Ensuite tu n'as pas besoin d'utiliser $_POST tu peux comme tu le fais plus haut utiliser $this->getRequest()->getPost()

En passant par le service manager et donc les factory tu récupères la même instance de ton formulaire et donc les données. Bakura pourra t'en dire plus c'est lui qui a fait le composant smile.

Hors ligne

 

#5 08-11-2012 13:11:39

J0r
Membre
Date d'inscription: 27-04-2012
Messages: 57

Re: [Résolu] populate formulaire ?

J'ai juste suivi ce qui est dit en formation ZendFramework2

En relisant j'ai vu qu'il manquait le $form->prepareElements(); comme précisé ci-dessous ;

Tiré du projet présenté en formation (zf2widder.complete\module\HootAndHoller\src\HootAndHoller\Controller\LoginController.php) :

Code:

[lang=php]
        $request = $this->getRequest();
        $form = new LoginForm();
        $form->prepareElements();
        if ($request->isPost()) {
            $filter = new LoginFilter();
            $inputFilter = $filter->prepareFilters();
            $form->setInputFilter($inputFilter);
            $form->setData($request->getPost());
            if ($form->isValid()) {
                        ....

Merci.

Dernière modification par J0r (08-11-2012 13:22:16)

Hors ligne

 

#6 08-11-2012 13:55:14

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: [Résolu] populate formulaire ?

Justement tu en as un autre ici https://github.com/bakura10/ZendFormWebinar big_smile

Hors ligne

 

#7 09-11-2012 14:34:16

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Re: [Résolu] populate formulaire ?

Quelle formation, si ce n'est pas indiscret ?

En fait ton code est pas forcément faux, mais ce n'est pas vraiment la méthode "recommandée". Comme l'a dit Orkin, tu peux aller voir le code de mon webinar que j'ai donné sur le sujet. Pour l'instnatn tu n'as accès qu'au code mais la vidéo devrait bientôt être disponible en libre accès (Zend FR a mis un peu de temps à la monter à cause de la Zend Con).

Que fait ce "prepareElements" ? Je suppose qu'il ajoute les éléments dans le formulaire ? Autant le faire directement dans le constructeur, c'est la pratique recommandée.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages