Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai fait un petit plugin afin d'avoir des url de type :controller/:keyword pour l'un de mes sites.
Cela sert par exemple à utiliser des url de type :
http://mondomaine.com/pages/ma-page
où "pages" est un controller et ma-page le titre de ma page.
Voici la classe, j'aimerai beaucoup avoir l'avis de la communauté là-dessus :
class Package_Controller_Plugin_FriendlyUrl extends Zend_Controller_Plugin_Abstract{ public function preDispatch(Zend_Controller_Request_Abstract $request) { $dispatcher = Zend_Controller_Front::getInstance()->getDispatcher(); $controllerClassName = $dispatcher->getControllerClass($request); $controller = $dispatcher->loadClass($finalClass); $actionMethodName = $request->getActionName()."Action"; $methodExist = method_exists( $controller, $actionMethodName ); if(!$methodExist)$request->setActionName("index"); } }
Hors ligne
Qu'est-ce que tu cherches à faire ? Tu n'as absolument pas besoin de tout ça, là tu es en train de réécrire du code qui est fait automatiquement.
Tu as compris un peu le concept des contrôleurs ? Il te suffit tout simplement de créer des actions dans le contrôleur (ainsi, si tu veux la page mondomaine.com/pages/ma-page, il te faut un contrôleur "Pages" et une action - une fonction donc - appelée maPageAction).
Relis le quickstart sur le site de Zend Framework .
Hors ligne
Oki merci pour ta réponse,
Je vais essayer d'être plus claire, ici "ma-page" est une valeur dynamique. Prenons plutôt "mon-article" ça sera peut-être plus évident.
Je souhaite que les url du type :controller/:articleName soient traitées au niveau de l'action "index" du controller, mais je souhaite également que les autres actions du controller soient accessibles normalement (:controller/:action )
C'est le même principe que les vanity url mais avec un niveau supplémentaire.
J'avais également songé à implémenter la méthode "__call" ...
Merci.
Hors ligne
Il faut que tu regardes au niveau des routeur pour rediriger ces requêtes vers l'action qui t'intéresse.
Il faut juste faire attention qu'il n'ait pas de conflit entre la valeur dynamique et d'éventuelles actions dans le contrôleur. Par exemple : si tu souhaites que toutes les requêtes :controller/:articleName soient redirigées vers l'action "test" du controller "toto", et que dans le même temps tu as une action "foo" dans ton contrôleur "toto", il faut faire attention que :articleName ne prenne pas la valeur "foo", autrement il risque d'y avoir un conflit.
Hors ligne