2010-05-07 18 views
1

Je voudrais accomplir quelque chose comme ceci avec le routeur de ZF. ('controller' => 'products', 'action' => 'index')Zend Router diverses URL

//Show product details 
'http://mydomain.com/en/products/category-1/subcategory-3/product-name.htm' 

//List products in subcategory-3 
'http://mydomain.com/en/products/category-1/subcategory-3.htm' 

//List products in category-1 
'http://mydomain.com/en/products/category-1.htm' 

//List products in all categories 
'http://mydomain.com/en/products.htm' 

Dois-je préciser chaque possibilité que la route séparée? Ou y a-t-il une meilleure solution? (À l'aide Route_Regex?)

Répondre

1

Vous pouvez obtenir un itinéraire pour se rapprocher de celle en ayant par défaut vides comme si:

resources.router.routes.products.route = ":lang/products/:category/:subcategory/:product" 
resources.router.routes.products.defaults.category="" 
resources.router.routes.products.defaults.subcategory=""  
resources.router.routes.products.defaults.product="" 
resources.router.routes.products.defaults.controller="products" 
resources.router.routes.products.defaults.action="index" 

Cette route ne va pas gérer votre extension .htm sur /en/products.htm, et la catégorie/sous-catégorie/product peut avoir un .htm ajouté à leurs valeurs. Il est probablement plus facile à manipuler décaper la .htm de la demande avec un peu .htaccess RewriteRule magie plutôt que de travailler autour d'elle avec Zend_Router de base)

RewriteRule /([^/]+)/products(.*)\.htm /$1/products$2 

L'alternative serait d'utiliser un Custom or Regular Expression route

+0

Merci! L'idée de supprimer la partie '.htm' semble être une solution facile et propre. Merci pour le lien aussi. –

+0

Je viens de trouver que la solution avec mod_rewrite ne fonctionne pas, car le Zend_Router ne voit que l'URI d'origine, pas réécrit. Le seul moyen est d'utiliser l'indicateur [R] edirect, mais cela n'a aucun sens dans ce cas. :-( –