2010-05-07 76 views
1

我想用ZF路由器實現這樣的事情。 ('controller' => 'products', 'action' => 'index'Zend路由器的各種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' 

我是否必須指定每個可能性作爲單獨的路線?還是有更好的解決方案? (使用Route_Regex?)

回答

1

你可以得到的路由具有空默認像這樣以近似地認爲:

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" 

這條路是不會來處理/en/products.htm.htm擴展和類別/子類別/產品可能有一個.htm附加到它們的值。這可能是比較容易處理一點點的.htaccess剝離從請求中.htmRewriteRule魔法而不是圍繞它的工作基本Zend_Router)

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

另一種方法是使用Custom or Regular Expression route

+0

謝謝!剝離'.htm'部分的想法似乎是一個簡單而乾淨的解決方案。感謝您的鏈接了。 – 2010-05-07 07:48:17

+0

我剛剛發現使用mod_rewrite的解決方案不起作用,因爲Zend_Router只能看到原始URI,而不是重寫的。唯一的方法是使用[R] edirect標誌,但在這種情況下它沒有任何意義。 :-( – 2010-05-12 10:35:18