Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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 à :
function page1Action() {} function page2Action() {} --- function pagenAction() {}
Pour éviter ses déclarations, je vous propose la fonction suivante, à mettre dans le code du contrôleur :
<?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
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).
Hors ligne
Bonjour,
Oui, moi aussi, ça ma beaucoup étonné.
Mais je l'utilise depuis le post, et ça m'est vraiment indispensable.
Eric.
Hors ligne
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
'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
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)
Hors ligne
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
Pages: 1