Zend Router各种URL

时间:2010-05-07 07:20:34

标签: php zend-framework zend-controller-router

我想用ZF路由器实现这样的功能。 ('controller' => 'products', 'action' => 'index'

//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 个答案:

答案 0 :(得分: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"

该路由不会处理.htm上的/en/products.htm扩展名,并且类别/子类别/产品可能会在其值附加.htm。使用一点.htaccess .htm魔法来处理从请求中剥离RewriteRule而不是使用基本的Zend_Router解决它可能更容易

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

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