Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 28-05-2012 20:01:45

zendalf
Nouveau membre
Date d'inscription: 28-05-2012
Messages: 1

[Zend_Form] [ZF 1.11]Gestion des erreurs d'un formulaire de connexion

Bonjour,

Niveau débutant Zend.
Niveau PHP5 : avancé.

Je recherche  un moyen d'afficher les erreurs d'un formulaire de connexion créé avec Zend_form.


La logique de construction du formulaire est la suivante :

- Dans le répertoire : application\forms\login.php création de la class
"class Application_Form_Users extends Zend_Form" . Puis instanciation de cette class dans l'action "login" du controller "auth". Une première vérification est faite concernant la validité du formulaire par : $form->isValid($formData). Dans le cas ou le formulaire ne serait pas valide, j'aimerai réafficher le formulaire avec les erreurs bloquantes.
Or tout ce qui s'affiche après validation du formulaire c'est :  "An error occured     Error!", quelle que soit l'erreur volontaire commise dans le formulaire pour le tester.
Après recherches , il s'agit du message fourni par le controlleur de base ErrorController dans son action  index.


J'ai beau fouillé le web, je n'ai pas pas pistes.  Merci d'avance pour vos commentaires.









Voici la routine de traitement du formulaire dans l'action "login" du controller "auth" :

function loginAction()
    {
// Instanciation du formulaire
        $form = new Application_Form_Users();
        $this->view->form = $form;
         $formData = $_POST;
       
       
//Si on accède à cette routine à partir du formulaire =>isPost
        if($this->getRequest()->isPost()) {
//Si le formulaire est valide
                     if ($form->isValid($formData)) {
                    $f = new Zend_Filter_StripTags();
                    $username = $f->filter($form->getValue('username'));
                    $password = $f->filter($form->getValue('password'));
    
// L'adaptateur
                    $dbAdapter = Zend_Db_Table_Abstract::getDefaultAdapter();
                    $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
                    $authAdapter->setTableName('users');
                    $authAdapter->setIdentityColumn('username');
                    $authAdapter->setCredentialColumn('password');
    
                  
// On assigne les valeurs pour que l'authentification s'effectue
                    $authAdapter->setIdentity($username);
                    $authAdapter->setCredential($password);
                  
// On tente l'authentification
                    $auth = Zend_Auth::getInstance();
                    $result = $auth->authenticate($authAdapter);
                         // On test si tout s'est bien passé
                    if($result->isValid())
                        {
                            $data = $authAdapter->getResultRowObject(null, 'password');

                    //permet de regénérer l'identifiant de session
                        Zend_Session::regenerateId();
                    $auth->getStorage()->write($data);
               
$this->_helper->redirector('index', 'index');

                    //$this->_redirect('/');
                        }
                        else
                        {
                        $this->view->error = 'Mauvais login ou mauvais mot de passe.';
                            $form->populate($formData);
                            $this->view->form=$form;
                        }
                    }
// Si le formulaire n'est pas valide
                else {
                    // $this->view->error = 'Vous devez remplir tous les champs.';
                      echo $form;
                        // $form->populate($formData);
                        // $this->view->form= $form;
                }
               
            //redirection si la page n'a pas été appelée à partir d'un formulaire
            $this->_redirect($this->view->url(array('controller' => 'Auth','action' => 'index'), 'default', true));
   
        }

}







-Voici le contenu de ErrorController :

class ErrorController extends Zend_Controller_Action
{


public function errorAction()
    {
        $this->view->message = "Error !";

    }

    public function denyAction()
    {
        $this->view->message = "You are not allowed to see this page !";
       }
}


-Voici la création du formulaire  :
class Application_Form_Users extends Zend_Form
{

    public function init()
    {
            $this->setName('login_form');
            ->setMethod('post');   

//Redefinition des validators           

            $notEmpty = new Zend_Validate_NotEmpty();
$notEmpty->setMessage('foo');
$isMatch = new Zend_Validate_IsMatch();
$isMatch->setMessage('bar');
$yourElement->addValidators(array($notEmpty, $isMatch));

//Champ login           
           
            $login = new Zend_Form_Element_Text('username');
            $login->setLabel('Login : ')
            ->setRequired(true)
            ->addFilter('StripTags')
            ->addFilter('StringTrim')
            ->addErrorMessage('Please, type your phone here!')
            ->addValidator('NotEmpty', true, array('messages'=>'Cannot be empty'))
            ->addValidators(array($notEmpty, $isMatch));

//Champ mdp

            $password = new Zend_Form_Element_Password('password');
            $password->setLabel('Mot de passe : ')
            ->setRequired(true)
            ->addFilter('StripTags')
            ->addFilter('StringTrim')
            ->addErrorMessage('Please, type your phone here!')
            ->addValidators(array($notEmpty, $isMatch))
            ->addValidator('NotEmpty', true, array('messages'=>'Cannot be empty'));

            //->addValidator('NotEmpty');

            $submit = new Zend_Form_Element_Submit('Login');
            $submit->setAttrib('id', 'submitbutton');
            $submit->setValue('Login');
    
            $this->addElements(array($username, $password, $submit));
    }
}

Dernière modification par zendalf (28-05-2012 22:55:58)

Hors ligne

 

#2 18-06-2012 14:57:46

mbret
Nouveau membre
Date d'inscription: 03-03-2012
Messages: 5

Re: [Zend_Form] [ZF 1.11]Gestion des erreurs d'un formulaire de connexion

Salut, j'ai plusieurs remarques.

Pour commencer utilise les balises codes pour présenter ton code.

- Revois eventuellement ce bout de code

Code:

[lang=php]
$formData = $_POST;
//Si on accède à cette routine à partir du formulaire =>isPost
if($this->getRequest()->isPost()) {

par

Code:

[lang=php]
if($this->getRequest()->isPost()) {
    $formData = $this->getRequest()->getPost();

- Ce bout de code

Code:

 [lang=php] $this->view->form=$form;

Écris le une seule fois à la fin de ton action.

- $form->populate($formData); ne sert à rien si tu n'a rien à pré afficher dans ton formulaire lorsque l'utilisateur demande la page. On l'utilise plutôt sur une page d’édition de compte par exemple. En fait le $form->populate($formData); se fait implicitement dans   if ($form->isValid($formData)) { il me semble.
Quand tu lance la validation du formulaire celui ci va donc remplir les champs ainsi que les messages d'erreurs. Tu n'a rien à faire.

- Ton filtre $f = new Zend_Filter_StripTags(); dans ton action est je crois inutile puisque déjà écrite dans ta classe formulaire

- Dans cette partie

Code:

 [lang=php]
else {
    // $this->view->error = 'Vous devez remplir tous les champs.';
    echo $form;
    // $form->populate($formData);
    // $this->view->form= $form;
}

Tu devrais juste assigner un éventuel message d'erreur comme la première ligne que tu as commenté


Fais un peu le ménage dans tout ça on devrais y voir plus clair wink

Dernière modification par mbret (18-06-2012 15:11:03)

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