Home / News / ZF URL routing

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.