Utilizzando Zend_Controller_Router_Route per creare URL amichevoli per le azioni in IndexController
-
18-09-2019 - |
Domanda
Nel mio IndexController, ho attualmente indexAction (home page), loginAction e LogoutAction. Sto cercando di rimuovere "/ index /" dal URL per ottenere domain.com/login invece di domain.com/index/login.
Qual è il modo più pulito per raggiungere questo obiettivo? C'è una RegEx possiamo usare? Io non voglio mai / index / nella URL.
La mia soluzione attuale, che a mio avviso può essere migliorato, è al di sotto. Inoltre, che cosa fa il primo parametro in addroute () fare?
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initViewHelpers()
{
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter();
$router->addRoute('login',
new Zend_Controller_Router_Route('login/*', array(
'controller' => 'index',
'action' => 'login'
))
);
$router->addRoute('logout',
new Zend_Controller_Router_Route('logout/*', array(
'controller' => 'index',
'action' => 'logout'
))
);
}
}
Soluzione
Non c'è niente da impove, è necessario creare rotta per ogni azione. Questo vi permetterà di cambiare le impostazioni predefinite di percorso (modulo / regolatore / azione) senza modificare il codice.
Il primo parametro è il nome della rotta, che è necessario utilizzare con url () helper in vostro punto di vista:
<a href="<?php echo $this->url(array(), 'login', true); ?>">Login</a>
Aggiornamento. È possibile utilizzare tale percorso, se si vuole un solo percorso senza "indice" in url:
$router->addRoute('default',
new Zend_Controller_Router_Route(':action/*', array(
'controller' => 'index',
))
);