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

Zend_Form PHP Discussion :

Utilisation de Zend_form [ZF 1.7]


Sujet :

Zend_Form PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Par défaut Utilisation de Zend_form
    Bonjour,

    J'ai créé sans aller très loin dans le développement, un formulaire qui permet de saisir un commentaire et l'affiche sur la page.

    Suite au développement, plusieurs petit soucis 'minime' apparaissent.

    1/ un decallage entre le label et le input text en sortie html
    2/ en rafraichissant ma page, l'enregistrement se fait à nouveau.

    De plus, j'aurai aimé savoir si je respecte bien l'ensemble du MVC et que le tout est codé dans les règles.

    Un screenshot pour représenter le tout :



    Le 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
     
    class CommentaireForm extends Zend_Form{
    	public function __construct($options=null){
    		parent::__construct($options);
    		$this->setName('ajouterCommentaire');
    		$nom = new Zend_Form_Element_Text('Nom');
    		$nom->setLabel('nom')
    				->setRequired(true);		
    		$email=new Zend_Form_Element_Text('Email');
    		$email->setLabel('email')	
    					->setRequired(True);
    		$contenu= new Zend_Form_Element_Textarea('Contenu');
    		$contenu->setLabel('commentaire')
    					->setRequired(True);
    		$submit = new Zend_Form_Element_Submit('envoyer');
    		$submit->setLabel('envoyer');
    		$this->addElements(array($nom,$email,$contenu,$submit));
    	}
    }
    indexController.php
    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
     
    	function addcomAction(){
    		$this->view->title="ajouter com";
    		$formCom = new CommentaireForm();
    		if($this->_request->isPost()){
    			$formData = $this->_request->getPost();
    			$formCom->populate($formData);
    			$formData=$formCom->getValues();
    			if($formCom->isValid($formData)){
    				$com = new Commentaire();
    				$commentaire = $com->createRow($formData);
    				if($commentaire){
    					$id=$commentaire->save();
    				}
    			}
    		}
    		$this->view->formCom=$formCom;
    	}
    addcom.phtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    		echo $this->action('affichercom','index');
    		echo $this->formCom;
    ?>
    Commentaire.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Commentaire extends Zend_Db_Table_Abstract {  
     
      protected $_name = 'commentaire';
      protected $_primary = 'Id';
     
      public function getCommentaireAll(){
    		return $this->fetchAll();
      }
    }

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    1) Si tu ne veux pas de réenregistrement avec actualiser, tu dois faire une redirection après enregistrement des données, même si c'est vers la même page.
    2) J'imagine que c'est un test, mais tu dois impérativement tester tes données dans le form en utilisant des filters et des valideurs. Exemple : si tu rentres des espaces dans l'un des champs requis, il doit être considéré comme vide, ce qui n'est pas le cas dans ton exemple.
    3) $formCom->populate($formData); n'est pas utile à cet endroit. Il me parait plus clair de l'insérer en cas d'échec de validation.
    4) Sinon, le MVC me semble bien respecté dans ce code.

  3. #3
    Membre éclairé Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Par défaut
    Citation Envoyé par vg33 Voir le message
    1) Si tu ne veux pas de réenregistrement avec actualiser, tu dois faire une redirection après enregistrement des données, même si c'est vers la même page.
    2) J'imagine que c'est un test, mais tu dois impérativement tester tes données dans le form en utilisant des filters et des valideurs. Exemple : si tu rentres des espaces dans l'un des champs requis, il doit être considéré comme vide, ce qui n'est pas le cas dans ton exemple.
    3) $formCom->populate($formData); n'est pas utile à cet endroit. Il me parait plus clair de l'insérer en cas d'échec de validation.
    4) Sinon, le MVC me semble bien respecté dans ce code.
    Merci, en plus j'ai compris toutes tes remarques

    3/ tu abordes une remarque sur laquel je voulais poser une question. J'ai cherché, mais j'ai moyennement compris. A quoi sert exactement cette ligne? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $formCom->populate($formData);
    Je me dis qu'elle sélectionne les données envoyé en post et que cela l'insère dans le modèle de formulaire créer?

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    populate() complète en bloc toutes les values de l'objet Zend_Form, typiquement avec les données POST ou GET. C'est utile pour réafficher un formulaire avec des erreurs.
    Une précision : à ma connaissance, populate() ne complète pas les values de champs indiqués en disabled. Il faut faire un setValue() pour chacun de ces champs.

  5. #5
    Membre éclairé Avatar de miya
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 469
    Par défaut
    Merci vg33

  6. #6
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Et pour info, il me semble que populate est automatiquement appelé par isValid. Il est donc inutile de l'appeler explicitement si on a précédemment vérifié la validité du formulaire

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

Discussions similaires

  1. [ZF 1.10] Zend_Form : utilisation .ini + dynamisme
    Par Paul75 dans le forum Zend_Form
    Réponses: 0
    Dernier message: 16/01/2012, 23h08
  2. Réponses: 2
    Dernier message: 25/09/2011, 04h15
  3. [ZF 1.10] Utiliser Zend_form en Ajax
    Par arnolem dans le forum Zend_Form
    Réponses: 5
    Dernier message: 02/06/2010, 11h24
  4. Utiliser Zend_Form sans MVC
    Par dorian53 dans le forum Zend_Form
    Réponses: 1
    Dernier message: 06/03/2009, 10h15
  5. Réponses: 4
    Dernier message: 14/08/2008, 11h00

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