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 Framework PHP Discussion :

Rendu dynamique des vues


Sujet :

Zend Framework PHP

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 184
    Par défaut Rendu dynamique des vues
    Bonjour,

    J'utilise le Zend Framework en tant que Framework (et non pas sur le mode librairie à la demande) pour gérer mon site web.

    J'ai remarqué que j'avais beaucoup de page statique (qui se contente simplement d'afficher du texte) j'aimerais donc centraliser tous les appels à ces pages au sein d'un même controller, d'une même action et créer une sorte de front-controller pour les pages statiques, afin de pourquoi pas, caché les données etc

    Bref... j'ai donc créer un controller render et j'utilise l'action index qui prend un paramètre view censé définir à vue statique à afficher

    Voici ma fonction indexAction() :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    public function indexAction()
        {
        	// Définit un objet requête
        	$r = $this->getRequest();
     
        	// Vérifie qu'il y'a des données en GET
        	if ($r->isGET())
        	{
        		// Cherche la vue à afficher 
        		$view = $r->get('view');
     
     
        		$path = $this->view->getScriptPaths(); 
        		$path = $path[0];
        		$path .= 'render'; 
     
        		try {
        			$this->view->addScriptPath($path);
        			echo $this->view->render($view.'.phtml');
        		}
        		catch (Exception $e)
        		{
        			echo $e->getMessage(); 
        		}
     
        	}
     
        }
    Première chose :

    Bizarrement quand j'essaie d'utiliser la fonction render pour afficher ma vue statique, il ne me met pas le path complet mais s'arrête simplement au répertoire des vues de controller

    Autrement dit, les vues de mon controller render sont censées se trouver dans le répertoire : /application/views/scripts/render
    Mais quand je lui demande les basePath dans la fonction il ne m'affiche que :

    /application/views/scripts/

    Je suis donc obligé de récupérer le premier path, ajouter mon répertoire ou se situe les vues statiques et le reinjecté dans les scriptPath (à l'aide de addScriptPaths)

    Pas de problème tout s'affiche bien, ou cela se gate c'est quand j'appelle mon render(), le echo provoque une fuite de buffer et le layout ne peut donc plus s'afficher...

    En regardant dans les libs View, je vois effectivement cette ligne dans la fonction render :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return $this->_filter(ob_get_clean()); // filter output
    Voilà j'espère que vous pourrez m'aider, cela m'étonnerait que ça ne soit pas possible avec le Zend Framework alors que c'est un jeu d'enfant avec Symfony par exemple.

    Merci beaucoup.
    Cordialement.

  2. #2
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut
    Salut!

    J'ai pas totalement tout compris mais j'ai peut être une idée...

    Tu as créé un controller render et toutes tes vues son dans le dossier /application/views/scripts/render

    Dans ce cas dans l'action tu n'a qu'à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->renderScript("render/{$view}.phtml");

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 184
    Par défaut
    Cela marche parfaitement, merci.

    Cependant il y'a une chose qui me chiffonne, si le fichier de vue n'existe pas, une exception est levée et un message du type est affichée :

    script 'render/testr.phtml' not found in path (/Applications/MAMP/htdocs/***/frontend/application/views/scripts/)
    Comment tester proprement l'existence de la vue ?

    Je pensais boucler les scriptPath et faire un file_exist pour chaque path

  4. #4
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut
    Je sais pas si ça marche ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    try {
        $this->renderScript("render/{$view}.phtml");
    } catch (Exception $e) {
        throw new Zend_Controller_Exception('Page non trouvée');
    }
    Un truc dans le genre quoi...

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 184
    Par défaut
    En m'inspirant du Zend Framework lui même (méthode _script de tête je dirais)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // Vérifie l'existence de la vue 
        		$exist = false; 
     
        		foreach ($this->view->getScriptPaths() as $path)
        		{
        			// Test l'existence du file 
        			if (file_exists($path."render/{$view}.phtml"))
        			{
        				$exist = true; 
        				break; 
        			}
        		}
    Cela me permet également de throw mes propres exceptions

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/08/2009, 09h59
  2. [JSP] utilisation dynamique des includes
    Par shinchun dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 24/05/2004, 15h28
  3. Problèmes avec des vues
    Par dady dans le forum MFC
    Réponses: 22
    Dernier message: 09/01/2004, 16h26
  4. [Crystal Report] Utilisation des vues de sql serveur
    Par Olivierakadev dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 15/11/2002, 17h44
  5. Réponses: 2
    Dernier message: 31/08/2002, 14h00

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