Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Form
Zend_Form Forum d'entraide pour le composant Zend_Form du Zend Framework (création de formulaires, helpers, AJAX etc.). Avant de poster -> FAQ Zend_Form.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/09/2011, 17h06   #1
Membre confirmé
 
Inscription : septembre 2009
Messages : 39
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 39
Points : 229
Points : 229
Par défaut Formulaire sur toutes les pages

Bonjour à tous,

J'ai un formulaire d'inscription à une newsletter qui se retrouve sur toutes mes pages. Pour ceci, j'ai utilisé une aide de vue dans laquelle je ne fais que retourner la création de mon formulaire, et j'utilise cette aide de vue dans mon layout.

Mon aide de vue :
Code :
1
2
3
4
5
6
7
8
9
<?php
 
class Zend_View_Helper_NewsletterForm {
 
    public function newsletterForm() {
        $f = new Application_Form_Newsletter();
        return $f;
    }
}
Et dans mon layout :
Code :
<?php echo $this->newsletterForm(); ?>
Problème : comment traiter ce formulaire à présent ?
J'ai essayé de le récupérer dans un controller :
Code :
1
2
3
4
    if ($this->getRequest()->isPost() ) {
 
        $formData = $this->getRequest()->getPost();
    }
ça fonctionne, mais je ne peux pas vérifier sa validité, puisque je n'ai pas crée ce formulaire dans ce controller, je ne peux donc pas faire
Code :
1
2
3
if ($f->isValid($formData)) {
   //Traitement si valide
}
Toutefois, même si cela fonctionnait, cela voudrait dire qu'il faudrait que je traite le formulaire sur chacun de mes controller, ce qui ne me semble pas très pratique. Y a t-il une solution ? Je pensais partir vers les aides d'actions, mais je ne sais pas si c'est une bonne solution ?


Question bonus, toujours sur Zend_Form :
J'ai plusieurs formulaires par pages, par exemple un formulaire de connexion et le dit formulaire d'inscription à la newsletter.
Pour traiter uniquement un seul formulaire, et le bon, la seule solution que j'ai trouvée est celles-ci (http://www.developpez.net/forums/d68...mulaires-page/) utiliser getParam() et des noms de submit différents. N'existe-il pas une solution "plus propre" ? Comme récupérer le nom/l'id du formulaire ?

Par avance merci pour votre aide
Ibuprofène est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2011, 17h17   #2
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Ue action nest censé gérer qu un formulaire tu devrais donc envoyer tes formulaires vers des actions différentes.

As tu essayé d initialiser une nouvelle instance de ton formulaire afin de l utiliser seulement pour vérifier les données?
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2011, 17h59   #3
Membre confirmé
 
Inscription : septembre 2009
Messages : 39
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 39
Points : 229
Points : 229
Bonjour 5h4rk,

Citation:
As tu essayé d initialiser une nouvelle instance de ton formulaire afin de l utiliser seulement pour vérifier les données?
Je viens d'essayer et ça fonctionne :

Donc dans mon controller :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//Une fonction qui génère mon formulaire
    public function getForm() {
      $f = new Application_Form_Newsletter();
      return $f;
}
 
//Puis dans l'action
if ($this->getRequest()->isPost() ) {
 
        $formData = $this->getRequest()->getPost();
 
        $f = $this->getForm();
 
        if ($f->isValid($formData)) {
            var_dump($formData);
        }
        else {
            echo 'erreur';
            $f->populate($formData);
        }
 
    }
Si il y a erreur, j'ai bien le mot 'erreur' qui apparaît, et si le formulaire est valide, j'ai bien un var_dump de mes datas. Mais il y a tout de même un problème : les erreurs du formulaire (celle directement écrite dans le formulaire via les addValidator) ne s'affichent pas.
Après avoir testé je me rend compte que pour que celles-ci s'affichent il faut que je crée le formulaire dans mon controller et que je le traite dans ce même controller, même action, pour que ce soit pris en compte.
Ça me semble bien contraignant, j'ai raté un passage ?

Citation:
Ue action nest censé gérer qu un formulaire tu devrais donc envoyer tes formulaires vers des actions différentes.
Pourquoi donc ? Est-ce une préconisation du ZF ?
Il ne s'agit que d'un formulaire avec un input pour le mail et un submit. Je voudrais permettre à l'utilisateur de s'enregistrer sans qu'il quitte la page sur laquelle il se trouve et donc traiter ce formulaire directement sur la page en cours.
Ibuprofène est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2011, 18h44   #4
Modérateur
 
Homme Loïc
Développeur Web
Inscription : février 2011
Messages : 678
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2011
Messages : 678
Points : 1 041
Points : 1 041
Tu devrais peut être voir pour gérer le formulaire pour s'inscrire à la newletter en ajax, ce n'est que mon avis.

Ce n'est pas une règle de développement pour un formulaire par action sous Zend mais en développement et particulièrement sous Zend il est recommandé un certain nombre de lignes par action ou méthode
5h4rk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h00.


 
 
 
 
Partenaires

Hébergement Web