Zend Framework URL routing
Se volessimo personalizzare il comportamento della URL di un nostro progetto ZF, possiamo personalizzare l'ordine dei parametri che ZF si aspetta, senza perdere il comportamenteo standard.
Normalmente se abbiamo una controller "index" ed una azione "mypage" nel nostro progetto ZF, allora per richiamare questa azione la URL di default sarà:
"http://xxxxxx/index/mypage"
Che equivale a dire allo ZF di scegliere il modulo: Default, la controller: Index a l'azione: Mypage.
Supponiamo invece di voler cambiare la url del nostro progetto in:
"http://xxxxxx/nazione/lingua/pagina"
Prima di tutto creo nella controller Index, una azione chiamata mypage con il seguente contenuto che mi servirà a monitorare la variabili ricevute:
public function mypageAction()
{
var_dump($this->_getAllParams());
}
ora sarà sufficiente modificare il nostro file di bootstrap aggiungendo questa funzione:
protected function _initRoutes()
{
$route = new Zend_Controller_Router_Route(
':country/:lang/:page',
array(
'country' => 'italia',
'lang' => 'it',
'page' => 'Home',
'controller' => 'index',
'action' => 'mypage'
)
);
$router = Zend_Controller_Front::getInstance()->getRouter();
$router->addRoute('myroute', $route);
}
In questo modo potremo richiamare il nostro progetto ad esempio con
http://xxxx/italia/it/miapagina1
purtroppo però qualsiasi url che non rispetti questo standard, sarà dirottata sempre alla stessa azione che abbiamo appena creato.
Se volessimo conservare la funzione standard dobbiamo fare in modo che ZF riconosca quando usare la route personalizzata da noi e quando invece usa la route standard, quindi se la nostra URL potesse diventare:
http://xxxxx/country/italia/it/pagina1
in questo caso la parola country, farà da discriminante per far capire a ZF che stiamo usando la URL personalizzata
basterà quindi modificare il codice nel file di Bootstrap come segue:
protected function _initRoutes()
{
$route = new Zend_Controller_Router_Route(
'country/:mycountry/:lang/:page/*',
array(
'mycountry' => 'italia',
'lang' => 'it',
'page' => 'Home',
'controller' => 'index',
'action' => 'mypage'
)
);
$router = Zend_Controller_Front::getInstance()->getRouter();
$router->addRoute('country', $route);
}Notare che l'array contiene i valori di default che verranno utilizzati in caso vengano omessi.
Vediamo alcuni esempi funzionanti ed equivalenti tra di loro:
http://xxxxx/index/mypage == http://xxxxx/country/
(aggiugerà i valori di default specificati per i parametri)
http://xxxxx/default/index/mypage
(uguale a sopra)
http://xxxxx/country/belgio/fr/pagina1 ==
http://xxxxx/index/mypage/country/belgio/lang/fr/page/pagina1
Ultimo esempio un pò più complicato
http://xxxxx/country/belgio/fr/pagina1?myvar=aaa&othervar=bbb
==
http://xxxxx/index/mypage/country/belgio/lang/fr/page/pagina1/myvar/aaa/othervar/bbb
Commenti
Log in o crea un account utente per inviare un commento.