Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
je viens de basculer vers zend framwork, et j'avoue que je trouve les formulaire pas du tout évident.
donc j'ai suivi la doc zend pour faire un formulaire d'inscription, mais rien ne s'affiche.
voici les 3 fichier utiliser: dossier forms contient le fichier InscriptionForm.php
<?php class InscriptionForm extends Zend_Form { public function init() { //instantion de l'objet form $form= new Zend_Form(); $form->setAction('/resource/process') ->setMethod('post'); //élement nom $nom = $form->createElement('text','nom'); $nom->addValidator('alnum') ->addValidator('regex', false, array('/^[a-z]+/')) ->addValidator('stringLength', false, array(6, 20)) ->setRequired(true) ->addFilter('StringToLower'); //élement email $email = $form->createElement('text','email'); $email->addValidator('alnum') ->addValidator('regex', false, array('/^[a-z]+/')) ->addValidator('stringLength', false, array(6, 20)) ->setRequired(true) ->addFilter('StringToLower'); //élement password $password= $form->createElement('password','password'); $password->addValidator('StringLength', false, array(6)) ->setRequired(true); //Ajout des elements au formulaire $form->addElement($nom) ->addElement($email) ->addElement($password) ->addElement('submit', 'submit', array('label' => 'Enregistrer')); } } ?>
mon controlleur InscriptionController.php
<?php require_once(dirname(__FILE__)."/../../../forms/InscriptionForm.php"); //include 'forms/InscriptionForm.php'; class Membres_InscriptionController extends Zend_Controller_Action { public function getForm() { //création du formulaire $form= new InscriptionForm(); return $form; } public function indexAction() { $this->view->form= $this->getForm(); $this->render('form'); } public function inscriptionAction() { if(!$this->getRequest()->isPost()){ return $this->_forward('index'); } $form= $this->getForm(); if(!$form->isValid($_POST)){ //Echec de la validation $this->view->form= $form; return $this->render('form'); } //recuperation des valeurs $values = $form->getValues(); } public function sauveAction() { } } ?>
ma vue dans le dossier inscription j'ai mis form.phtml
<h2>Identifiez vous</h2> <?php echo $this->form;
?>
le pb c'est qu'il m'affiche que Identifiez vousmais il y a pas le formulaire qui apparait, sauriez vous pourkoi??
merci pour vos réponses
Dernière modification par timo (26-01-2011 17:47:06)
Hors ligne
Bonjour, utilise les balise [ code ] stp
Pourtant les formulaires c'est pas vraiment compliqué, te prend pas la tete fait un truc dans le genre
<?php // le formulaire class My_Form_Inscription extends Zend_Form { public function init() { $this->addElements(array( new Zend_Form_Element_Text('givenName', array( 'required' => true, 'label' => 'Nom:', )), )); $this->setAction('/resource/process') ->setMethod('post'); } } ?>
<?php // le controller class InscriptionController extends Zend_Controller_Action { public function getForm() { //création du formulaire $form= new My_Form_Inscription(); return $form; } public function indexAction() { $this->view->form= $this->getForm(); } public function inscriptionAction() { if(!$this->getRequest()->isPost()){ return $this->_forward('index'); } $form= $this->getForm(); if(!$form->isValid($_POST)){ //Echec de la validation $this->view->form= $form; return $this->_forward('index'); } //recuperation des valeurs $values = $form->getValues(); } } ?>
<?php // la vue ?> <h2>Identifiez vous</h2> <?php echo $this->form; ?>
ps : si tu n'a pas l'autoload des classe il faut faire le include du formulaire dans le controller
Dernière modification par shadypierre (26-01-2011 16:02:42)
Hors ligne
Je pense que ton erreur viens du fait que tu crée un objet Zend_Form dans ton ta classe InscriptionForm qui dérive de Zend_Form. Tu créée donc dans ton formulaire un formulaire (ta variable $form) qui est détruit lors de la fin de ta fonction au lieu d'initialiser ton formulaire avec tes éléments.
Donc si tu supprimes la ligne $form= new Zend_Form(); et que tu remplaces les utilisations de $form par $this cela devrait fonctionner:
class InscriptionForm extends Zend_Form { public function init() { //instantion de l'objet form $this->setAction('/resource/process') ->setMethod('post'); //élement nom $nom = $form->createElement('text','nom'); $nom->addValidator('alnum') ->addValidator('regex', false, array('/^[a-z]+/')) ->addValidator('stringLength', false, array(6, 20)) ->setRequired(true) ->addFilter('StringToLower'); //élement email $email = $form->createElement('text','email'); $email->addValidator('alnum') ->addValidator('regex', false, array('/^[a-z]+/')) ->addValidator('stringLength', false, array(6, 20)) ->setRequired(true) ->addFilter('StringToLower'); //élement password $password= $form->createElement('password','password'); $password->addValidator('StringLength', false, array(6)) ->setRequired(true); //Ajout des elements au formulaire $this->addElement($nom) ->addElement($email) ->addElement($password) ->addElement('submit', 'submit', array('label' => 'Enregistrer')); } }
Hors ligne
merci pour les deux réponses qui marche bien,
effectivement fallait remplace le $form par le $this
merci encore
Hors ligne