Je suis en train de créer un itinéraire Zend_Controller_Router_Route_Regex pour traiter les URL sous la forme suivante:Route Zend Regex aider
search?q=chicken/page=2
où le premier motif d'expression régulière serait chicken
et deuxième serait 2
. Quant à la deuxième partie où page=2
, je veux le rendre facultatif s'il s'agit de la première page, c'est page=1
. Donc, un autre URL tel que search?q=chicken
serait également valide et est équivalent à search?q=chicken/page=1
.
Voici ma tentative, mais sans succès, mais pour vous donner une meilleure idée de ce que j'essaie de faire.
$route = new Zend_Controller_Router_Route_Regex(
'search\?q=([a-zA-Z0-9]+)(?:/page=(\d+))',
array(
'page'=> '1',
'module' => 'default',
'controller' => 'search',
'action' => 'index'),
array(1 => 'query', 2 => 'page'),
'search?=%s/page=%d');
$router->addRoute('search', $route);
Le problème ici est que je ne peux pas composer la regex correcte.
Merci d'avance.
EDIT # 1
La regex correcte, comme l'a souligné MA4, est 'search\?q=([a-zA-Z0-9]+)(?:/page=(\d+))?'
Le vrai problème est pointé par Darryl. Voici un peu plus d'informations pour mettre les choses en perspective.
Ma recherche zone de texte et le bouton
<form action="/search" method="get">
<input type="text" name="q" />
<input type="submit" value="Search" />
</form>
Chaque fois que j'appuie sur le bouton search
, je reçois la recherche? Q = demande [texte]. Comment puis-je le forcer à passer par la route de match regex?
Voici ce que je veux faire, mais le code ne fonctionne pas
if($this->getRequest()->getParam('query')){
// redirect success
} else {
$url = "search?q=" . $this->_getParam('q');
$this->_redirect(route('search'), array('code' => 301));
}
Merci pour les commentaires, je sais maintenant pourquoi mon bouton de recherche ne fonctionne pas. J'ai édité ma question originale pour plus de détails. – nobody
Ma réponse est toujours la réponse. Ce que vous essayez de faire n'est pas possible avec la chaîne de requête '/ search? Q = chicken/page = 2' résultera en un pathinfo'/search' et un seul paramètre $ _GET de 'q' ayant la valeur' chicken/page = 2' - le routeur Zend Framework utilise le pathinfo UNIQUEMENT. –