J'ai quelques questions concernant le Zend Framework. Je tente d'acheminer toutes les pages statiques via le contrôleur par défaut en utilisant la méthode displayAction()
par défaut. L'intention est d'avoir le displayAction()
traiter la demande en regardant le param page
, déterminer si la page de script existe, si elle rend la vue sinon lancer une erreur de 404 pages non trouvées. De plus, un test est effectué pour voir si une méthode portant le même nom que le param existe, si c'est le cas, appelez cette action.Mise à jour: Bonnes pratiques de gestion du contenu statique dans Zend Framework
Listed ici est la configuration de routage du application.ini
resources.router.routes.static-pages.route = /:page
resources.router.routes.static-pages.defaults.module = default
resources.router.routes.static-pages.defaults.controller = index
resources.router.routes.static-pages.defaults.action = display
Voici les actions du contrôleur:
public function someAction() {
// do something
}
public function displayAction() {
// extract page param, e.g. 'some'
$page = $this->getRequest()->getParam('page');
// create zend styled action method, e.g. 'someAction'
$page_action = $page.'Action';
// if a method within this controller exists, call on it
if (method_exists($this, $page_action)) {
$this->$page_action();
}
// if nothing was passed in page param, set to 'home'
if (empty($page)) {
$page = 'home';
}
// if script exists, render, otherwise, throw exception.
if (file_exists($this->view->getScriptPath(null)."/".$this->getRequest()->getControllerName()."/$page.".$this->viewSuffix)) {
$this->render($page);
} else {
throw new Zend_Controller_Action_Exception('Page not found', 404);
}
}
Maintenant, voici mes questions: Y at-il une meilleure façon de Ce faisant? Je suis relativement nouveau dans ce cadre, alors y a-t-il des pratiques exemplaires qui s'appliquent? Existe-t-il une meilleure façon d'appeler une action depuis un contrôleur? J'ai fait BEAUCOUP de regarder autour de la documentation, cependant, une bonne partie semble se contredire.
Mise à jour 1:
Après avoir une réflexion et une lecture, je l'ai réussi à simplifier la solution et inclure un certain nombre de choses qui ont été mentionnées. REMARQUE: j'utilise PagesController
comme contrôleur de contenu statique par défaut.
La configuration du routage à partir du fichier application.ini est répertoriée ici. Pour les appels à la page d'accueil, c'est-à-dire «/», je passe «home» au paramètre action
, pour toutes les autres demandes, le paramètre de lien défini par l'utilisateur/url est envoyé au action
.
resources.router.routes.home.route = "/"
resources.router.routes.home.defaults.module = "default"
resources.router.routes.home.defaults.controller = "pages"
resources.router.routes.home.defaults.action = "home"
resources.router.routes.pages.route = "/:action"
resources.router.routes.pages.defaults.module = "default"
resources.router.routes.pages.defaults.controller = "pages"
Voici les actions du contrôleur. Si l'utilisateur définit le paramètre existe comme une action, il sera appelé, sinon il tombe à la fonction magique php __call.
public function someAction()
{
// Do something
}
public function __call($method, $args)
{
// extract action param, e.g. "home"
$page = $title = $this->getRequest()->getParam('action');
// test if script exists
if (file_exists($this->view->getScriptPath(null) . "/"
. $this->getRequest()->getControllerName() . "/$page . " . $this->viewSuffix))
{
// pass title to layout
$this->view->assign(compact('title'));
// render script
$this->render($page);
} else {
throw new Zend_Controller_Action_Exception('Page not found', 404);
}
}
Cela fonctionne. Donc, voici mes questions: envisageriez-vous de standardiser l'utilisation de cette méthode pour gérer le contenu statique? Si non, pourquoi pas? Comment l'amélioreriez-vous? En outre, étant donné qu'il s'agit d'une requête GET, serait-il sage d'utiliser Zend_Filter_input pour nettoyer les entrées ou est-ce juste trop?
Merci pour les commentaires, je vais certainement jeter un oeil à cela. – Hegemon