Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 03-10-2010 13:02:08

psylo66
Nouveau membre
Date d'inscription: 03-10-2010
Messages: 2

[Résolu][Zend_Layout][Zend 1.10] Zones indépendantes

Bonjour,

Ayant déja lu et relu la documentation, cherché et recherché je n'arrive pas à comprendre le comportement du framework.

Donc j'ai un layout qui s'affiche correctement et je veux faire des opération distinctes sur un formulaire d'authentification dans une zone et un formulaire d'inscription dans ma zone principale de contenu.

Voici mon layout :


Code:

 
<?php echo $this->doctype(); ?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <?php echo $this->headTitle(); ?>
    <meta name="description" content="description content" />
    <meta name="keywords" content="keywords" />
    <meta name="author" content="author" />
    <meta charset="UTF-8" />
    <!--[if IE]>
    <script src="/scripts/html5-ie.js"></script>
    <link href="/css/themes/colorpaper/ie.css" media="screen" rel="stylesheet" type="text/css" />
    <![endif]--> 
     <?php echo $this->headLink()->appendStylesheet('/css/themes/colorpaper/style.css')
                                 ->appendStylesheet('/css/themes/colorpaper/reset-min.css');?>
     
</head>
<body>
<div id="bgRepeatBottom">
            <div id="bgTop">
                <div id="bgBottom">
                    <div id="content">
                    <header>
                        <nav>
                            <a href="<?php echo $this->url(array('controller'=>'index'),'default',true) ?>" title="Accueil" >Accueil</a>
                            <a href="<?php echo $this->url(array('controller'=>'concept'),'default',true) ?>" title="Concept du site" >Concept du site</a>
                            <a href="<?php echo $this->url(array('controller'=>'rss'),'default',true) ?>" title="RSS" >RSS</a>
                            <a href="<?php echo $this->url(array('controller'=>'contact'),'default',true) ?>" title="Contact">Contact</a>
                        </nav>
                    </header>    
                        <div id="brdTopContent"></div>
                        <div id="page">
                            <div id="leftContent">
                                <section id="searchengine">
                                     <h1><?php echo $this->escape($this->title); ?></h1>
                                    <?php echo $this->layout()->content;?>
                                </section>    
                                <div id="backgroundBottomLeftContent"></div>
                                <section id="news">
                                    
                                </section>
                            </div>
                            <div id="rightContent">
                                <section id="log">
                                    <h1> Authentification </h1>
                                    <?php echo $this->action('log','login'); ?>    
                                </section>    
                                <section id="statistics">
                                    
                                </section>
                                <section id="ranking">        
                                    
                                </section>
                            </div>
                            <div class="spacer"></div>
                        </div>
                        <footer>
                            <nav>
                
                            </nav>
                        </footer>
                    </div>
                </div>
            </div>
        </div>
</body>
</html>

Voici mon controller Login

Code:

 
<?php
 
class LoginController extends Zend_Controller_Action
{
 
    public function init()
    {
        
    }
 
    public function indexAction()
    {
      
    }
    
    public function logAction()
    {
        $formLogin = new Form_Login();
        $this->view->loginForm = $formLogin;
        $this->render('log');
        if($this->getRequest()->isPost()){
            $formDataLogin = $this->getRequest()->getPost();
                if ($formLogin->isValid($formDataLogin)) {
                    Zend_Debug::dump('ici');
                }else{
                    $formLogin->populate($formDataLogin);
                }
        }
    
         
    }
    
    
 
 
}

voici la vue login.phtml


Code:

 
<?php echo $this->loginForm; ?>
 

voici le form login.php associé
Code :

 
<?php
    class Form_Login extends Zend_Form
    {
        public function __construct($options = null)
        {
            parent::__construct($options);
            
            $this->setName('login');
            $this->setAction('/login/log');
            
            $email = new Zend_Form_Element_Text("emailLog",array('size' => 25));        
            $email ->setLabel('E-mail *')
                   ->setRequired(true)
                   ->addFilter('StringTrim')
                   ->addFilter('StripTags')
                   ->addValidator('NotEmpty', true , array('messages' => array('isEmpty' => 'Vide')))
                   ->addValidator('EmailAddress');
                   
            
            $email->addDecorator(new My_Form_Decorator_Html(array('html' => "<div class='spacer'></div>",'placement' => 'append')));
            
            $password = new Zend_Form_Element_Password("passwordLog", array('size' => 25));
            $password ->setLabel('Mot de passe *')
                      ->setRequired(true)
                      ->addFilter('StringTrim')
                      ->addValidator('NotEmpty', true , array('messages' => array('isEmpty' => 'Vide')));
            $password->addDecorator(new My_Form_Decorator_Html(array('html' => "<div class='spacer'></div>",'placement' => 'append')));    
            
 
            $valider = new Zend_Form_Element_Submit('valider');
            $valider->addDecorator(new My_Form_Decorator_Html(array('html' => "<a title='Inscription' href='/users/ajouter' id='inscription-link'>Inscription</a>",'placement' => 'append')));    
            $valider->setAttrib('id', 'boutonValider')
                    ->removeDecorator('DtDdWrapper');    
                         
            $this->addElements(array($email,$password,$valider));
        
 
                        
            
        }
 
    }

Donc mon formulaire d'authentification s'affiche correctement en haut à droite dans mon layout dans la <section id="log"> .

Par contre quand je valide ce formulaire d'authentification :
-Le formulaire vide s'affiche dans la section <section id="searchengine"> à la place du $this->layout()->content; au lieu de rester dans la section dans laquelle j'ai mon formulaire <section id="log"> ?

Voilà je ne comprends pas pourquoi le framework agit comme ça ?
Il doit y avoir quelque chose qui m'échappe ...

En vous remerçiant.

Dernière modification par psylo66 (06-10-2010 01:21:16)

Hors ligne

 

#2 04-10-2010 18:35:26

Denis. Beurive
Membre
Date d'inscription: 06-06-2009
Messages: 35

Re: [Résolu][Zend_Layout][Zend 1.10] Zones indépendantes

Salut,

Si je comprends bien :
* Au départ, lors de l'affichage initial de la page, le formulaire s'affiche à la place prévue.
* Mais, une fois le formulaire envoyé, il ne s'affiche plus.

C'est ça?

A+

Hors ligne

 

#3 06-10-2010 01:26:31

psylo66
Nouveau membre
Date d'inscription: 03-10-2010
Messages: 2

Re: [Résolu][Zend_Layout][Zend 1.10] Zones indépendantes

Oui j'étais un peu fatigué et je n'avais pas bien compris qu'en spécifiant une action à mon formulaire celle-ci allé forcément changer mon contenu de page.

Pour distinguer mes 2 formulaires sur la même page j'ai utilisé un input type hidden pour les différencier dans chaque form et j'ai laissé mon action vide pour chaque form :

//Exemple form login

Code:

$idForm = new Zend_Form_Element_Hidden('form');
            $idForm->removeDecorator('HtmlTag')
                   ->removeDecorator('label')
                   ->setAttrib('id', 'formLog')
                   ->setValue('formLog');

Ensuite je m'en occupe dans mon traitement lors de l'envoi

//controller login

Code:

public function log()
    {
        $formLogin = new Form_Login();
        $this->view->login = $formLogin;
        if($this->getRequest()->isPost()){
            $formDataLogin = $this->getRequest()->getPost();
            if(isset($formDataLogin['form']) && $formDataLogin['form']==='formLog'){
                    if ($formLogin->isValid($formDataLogin)){
                        if($this->_process($formLogin->getValues())){
                            $users = new Model_DbTable_Users();
                            if($users->obtenirStatutUser($formDataLogin['emailLog'])==1){
                                $logged = $this->loggedInAs();
                                $this->view->login = $logged;
                            }else{
                                //a améliorer (l'afficher déja caché dans le frm) 
                                $passwordElement = $formLogin->getElement('passwordLog');
                                $passwordElement->addDecorator(new My_Form_Decorator_Html(array('html' => "<div class='spacer'></div><div class='errorLog'>Votre compte est inactif (lien vue explication)</div>",'placement' => 'append')));    
                            }
                        }else{
                            //a améliorer (l'afficher déja caché dans le frm) 
                            $passwordElement = $formLogin->getElement('passwordLog');
                            $passwordElement->addDecorator(new My_Form_Decorator_Html(array('html' => "<div class='spacer'></div><div class='errorLog'>Email ou mot de passe incorrecte</div>",'placement' => 'append')));    
                        }    
                    }
            }        
        }
    }

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