Vi använder Apaches mod_rewrite endast till för att dirigera trafiken till index.php. ZF innehåller egen funktionalitet för att skriva om adresserna.
Detta görs med hjälp av klassen Zend_Controller_Router_Route. Exempel kan ni hitta i metoden initRoutes() i klassen Initializer.
Vår blogg behöver tre enkla "regler". För det första så vill vi att om användaren besöker adressen http://localhost:9001 så skall han/hon dirigeras om till en sida som visar alla inlägg.
Detta görs med följande regel:
$router->addRoute(
'short', new Zend_Controller_Router_Route('/',
array( 'module' => 'blog',
'controller' => 'index',
'action' => 'list') ) );
Observera att ovanstående regel aktiveras endast, om adressen inte innehåller GET-variabler.
Andra argumentet till Zend_Controller_Router_Route innehåller värden för de variabler som används då dessa inte har angivits. Vill vi tydligt ange dessa värden i adressen, skulle vi kunna göra det på följande sätt:
http://localhost:9001/blog/index/list
Vår blogg har endast två controller- classer, en i varje modul. Då båda dessa klasser heter IndexController så känns det onödigt att i varje URL ange ”index”. Därför har vi en passande regel för detta:
$router->addRoute(
'default', new Zend_Controller_Router_Route('/:module/:action/*',
array( 'controller' => 'index') ) );
Ovanstående regel förväntar sig att adressen innehåller namnet på modulen och action-metoden. Vi har placerat två behållare för dessa värden. Nämligen ”:module” och ”:action”. Tidigare nämndes att det är onödigt att inkludera namnet på controller-klassen i adressen så här har vi lagt till ”index” som default värde.
Om vi nu t.ex. vill navigera till vår bloggs söksida så kan vi ange följande adress:
http://localhost:9001/blog/search
Observera att ovanstående regel avslutas med en ”*”. Det är en wildcard och antyder att regeln accepterar flera variabler.
Våg blogg behöver rätt så enkla regler men Zend_Controller_Router_Route har mer att ge.
Mer om Zend_Controller_Router_Route kan du läsa på sidan http://framework.zend.com/manual/en/zend.controller.router.html.