Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 21-01-2009 14:24:32

epasquier
Membre
Date d'inscription: 12-01-2009
Messages: 15

Astuce pour gérer les pages statiques sans action dans le controleur

Bonjour,

Je voulais apporter ma contribution en vous proposant quelques lignes pour gérer les pages "statiques", c'est à dire les pages ne nécessitant pas d'action dans le contrôleur.
Sur la partie "institutionnelle" des sites, on trouve souvent un contrôleur se résumant à :

Code:

function page1Action() {}
function page2Action() {}
---
function pagenAction() {}

Pour éviter ses déclarations, je vous propose la fonction suivante, à mettre dans le code du contrôleur :

Code:

<?php
class IndexController extends Zend_Controller_Action
{
  //==========================
  // __call
  // Interception pour gestion des pages "statiques" ne necessitant pas d'action du controleur
  // Eric Pasquier - January 2009
  //--------------------------
  public function __call($method, $args)
  {
    // Construction du nom du script de la vue

    // Determination du nom de l'action: forme 'xxxxAction'
    $Laction = substr($method, 0, strlen($method)-6);

    // Nom du controleur courant
    $Lcontroller = $this->getRequest()->getControllerName();

    // Chemin racine des scripts
    $LscriptPaths = $this->view->getScriptPaths();
    $LrootScriptPath = $LscriptPaths[0];

     // Nom du fichier du script de la vue
    $Lscript = $LrootScriptPath . 
               $Lcontroller . DIRECTORY_SEPARATOR .
               $Laction . '.phtml';
     
    // Dans le cas ou le script de la vue existe, on laisse le controleur continuer
    // et la phase 'rendering' est faite automatiquement

    if (!file_exists($Lscript))
      // Le script n'existe pas: methode par defaut (errorAction ou throwExceptions suivant config prod ou dev)
      parent::__call($method, $args);
  }

  //==========================
  // errorAction
  //--------------------------
  function errorAction()
  {
    - - -
  }
}

La fonction __call permet d'intercepter l'erreur qui est levée du fait de l'inexistence de la déclaration pagexAction(). Si le script de la page existe, on peut laisser continuer le contrôleur qui exécute alors le "rendering" de la vue. Dans le cas contraire, on appel la fonction __call d'origine pour gérer l'erreur.

Bien sûr, l'utilisation de cette fonction est à réserver pour les contrôleurs dont la déclaration des fonctions n'apporte pas de valeur ajoutée. Dans mon cas, cela me permet de faire rédiger ces pages statiques par un profil n'ayant pas besoin d'avoir accès aux parties sensibles du site (le code php) tout en offrant la possibilité de créer de nouvelles pages.

N'hésitez pas à m'envoyer vos commentaires.
Eric.

Hors ligne

 

#2 31-10-2009 18:18:53

lesdoudous
Membre
Lieu: Paris, France
Date d'inscription: 24-10-2009
Messages: 27

Re: Astuce pour gérer les pages statiques sans action dans le controleur

Bonjour,

Colle parfaitement à ce que je cherche à faire, MERCI !

en revanche, je suis étonné que personne ne soit intervenu sur ce topic, il existe peut-être une façon plus simple de faire ? Plus pratique ? Plus... rapide ?

Peut-être tout mettre dans /public ? mais alors quid des routes ?
Merci par avance d'aiguiller un débutant (issu de CakePHP, pour lequel justement un dossier /pages/ permet de répondre à cette problématique).


Recrute 2 développeurs Zend expérimentés pour du développement d'applications métier... ==> MP !

Hors ligne

 

#3 31-10-2009 18:25:09

epasquier
Membre
Date d'inscription: 12-01-2009
Messages: 15

Re: Astuce pour gérer les pages statiques sans action dans le controleur

Bonjour,

Oui, moi aussi, ça ma beaucoup étonné.
Mais je l'utilise depuis le post, et ça m'est vraiment indispensable.

Eric.

Hors ligne

 

#4 31-10-2009 20:44:51

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Astuce pour gérer les pages statiques sans action dans le controleur

je fais beaucoup plus simple

dans mes règles dans le .htaccess je dis que tout ce qui est .html dans le dossier public ne doit pas êtres redirigé vers index.php (tout comme les images les css etc)

du coup je place simplement des fichiers html dans mon dossier public pour faire des pages statiques (comme l'aide en ligne par exemple)

A+JYT

Hors ligne

 

#5 31-10-2009 22:23:25

epasquier
Membre
Date d'inscription: 12-01-2009
Messages: 15

Re: Astuce pour gérer les pages statiques sans action dans le controleur

'Statique' dans le sens ou il n'y pas d'action dans le contrôleur.
Mais il faut quand même pouvoir utiliser le mécanisme du Layout, des View Helpers, Navigate, ...
Dans ce cas un simple fichier html ne suffit pas.
Eric.

Hors ligne

 

#6 01-11-2009 09:14:40

lesdoudous
Membre
Lieu: Paris, France
Date d'inscription: 24-10-2009
Messages: 27

Re: Astuce pour gérer les pages statiques sans action dans le controleur

Eric,

J'ai créé un controleur "PageController" dédié à la gestion des pages statiques. C'est un héritage du framework que j'utilise (CakePHP).

Je prévois ensuite d'utiliser les routes statiques de ZF pour donner les url propres et diriger ca vers le controleur Page, et l'action qui va bien.

Dans ton explication, tu choisis le IndexController, tu pourrais m'éclairer sur ce choix ? (qui ne donne aucun résultat chez moi d'ailleurs).

Dernière modification par lesdoudous (01-11-2009 09:15:25)


Recrute 2 développeurs Zend expérimentés pour du développement d'applications métier... ==> MP !

Hors ligne

 

#7 01-11-2009 11:47:11

nick
Membre
Date d'inscription: 31-05-2008
Messages: 84

Re: Astuce pour gérer les pages statiques sans action dans le controleur

tout comme lesdoudous, je pense qu'il y a plus simple ?
Pourquoi ne pas créer un controller spécifique, auquel on passe en paramètre un bel alias d'uri correspondant à un contenu HTML ?

par exemple
www.example.com/page/view/name/qui-sommes-nous

le mapping uri /fichier html peut se faire par rapport au nom du fichier par exemple, ou un fichier de conf

Dernière modification par nick (01-11-2009 11:49:00)

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