2010-05-07 74 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