Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Débutant sur ZF, j'ai, comme tous les nouveaux sur le forum, potassé une tripotée de tutoriels sur Zend_View, Auth et Layout.
Je bloque cependant sur un problème tout bête : je travaille actuellement sur un back office, et je souhaite donc afficher un formulaire de login si l'utilisateur n'est pas connecté.
J'ai donc fait le controleur suivant :
<?php class IndexController extends Zend_Controller_Action { public function indexAction() { $response=$this->getResponse(); $auth = Zend_Auth::getInstance(); if ($auth->hasIdentity()) { $identity = $auth->getIdentity(); } else { $response->insert("content",$this->view->render("login.phtml")); } } } ?>
et le layout.phtml suivant :
<?php echo $this->render('entete.phtml'); ?> <?php echo $this->layout()->content ?> <?php echo $this->render('pied.phtml'); ?>
(les entete et pied contiennent seulement du XHTML basique).
Mon problème est que quand je vais sur mon /, il m'affiche bêtement par défaut index/index.phtml et ne veut encore moins entendre parler de login.phtml (quil reconnait pourtant, vu que ZF me renvoie une superbe erreur si je le renomme).
J'ai du rater qqc de très visible, mais je ne sais pas quoi (bon, à 3h40 du matin, aussi....)
Donc n'hésitez pas à me corriger
Merci d'avance
Hors ligne
Dans le bootstrap, tu met :
$options = array( 'layout' => 'layout', 'layoutPath' => './app/views' ); Zend_Layout::startMvc($options);
et dans ton action tu fais :
public function indexAction() { ... $this->render('login'); }
Le Zend_Layout va alors automatiquement rendre login.phtml dans le segment 'content' que tu as défini dans ton fichier layout
Dernière modification par or4cle (08-04-2008 08:23:37)
Hors ligne
Merci or4cle, mais utiliser $this->render me fait perdre l'avantage de Zend_Layout, à savoir les sections nommées (j'ai un $this->layout()->content dans ma vue).
Hors ligne
scuse moi mais le Zend_Layout s'utilise comme çà...
$this->render('xxx') rend auto la vue dans le champ par défaut "content" si on ne l'a pas redéfinit autrement dans la config du zend_layout
si tu veux rendre la vue dans un autre segment, alors :
$this->render('xxx', 'toto')
avec toto un segment que tu aura ajouté qq part dans dans ton layout
$this->layout()->toto
Hors ligne
Au final j'ai un controleur comme ceci :
<?php class IndexController extends Zend_Controller_Action { public function indexAction() { $auth = Zend_Auth::getInstance(); if ($auth->hasIdentity()) { $identity = $auth->getIdentity(); } else { $this->render("login"); } } } ?>
Mon erreur était de spécifier une cible "content" alors que vu que c'est celle par défaut, cela ne marche pas
Si je ne spécifie pas "content", ca affiche bien mon résultat.
Merci merci
(je pense que ce n'est pas la dernière question que je poserais ici )
Hors ligne
Par contre, $this->render ne permet que d'inclure des fichiers existants, mais pour insérer un $form ?
Hors ligne
j'ai pas encore beaucoup créusé Zend_Form
je fais comme ici dans le seul form de test que j'ai fait =>
http://akrabat.com/2008/02/21/simple-zend_form-example/
Hors ligne
Bon finalement, avec le controleur suivant ca marche :
class IndexController extends Zend_Controller_Action {
public function indexAction()
{
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity())
{
$identity = $auth->getIdentity();
}
else
{
$form = new forms_LoginForm();
$this->view->form = $form;
}
}
}
En foutant LoginForm.php dans models/forms (LoginForm.php contenant class forms_LoginForm extends Zend_Form)
Hors ligne