复杂/不可能Zend_Router_Route_Regex用于具有类别层次结构的产品页面?

时间:2011-05-09 22:13:07

标签: php regex zend-framework routing

我不知道这是否可行。我已经尝试了很多不同的正则表达式组合,我什么都没想出来。所以,这是我的问题......

我有一个产品页面,需要根据类别(可以嵌套到无限,但最有可能嵌套3个级别),排序列(带订单,ASC或DESC),过滤器(即制造商,这将是键/值对),标签(可以包含空格的单词(\ w)的简单列表),最后是页面。

该类别是上述唯一必需的选项。当然,上面的每个变量都需要被捕获到一个数组中进行处理。

示例网址:

http://mydomain.com/products/Home/Bedroom/Beds/sort/price/desc/filters/manufacturer/ikea/size/king/tags/black/lowprofile/wood/green/page/2

会呈现:

category => Home/Bedroom/Beds
sort_by => price
sort_order => desc
manufacturer => ikea
size => king
tags => Array('black','lowprofile','wood','green')
page => 2

我很确定我生活在这个正则表达式可能的梦想世界中。或许我正在以错误的方式看待它。很可能因为我已经盯着它看了很长时间。

任何接受者?我会在这里把头撞到墙上。

2 个答案:

答案 0 :(得分:1)

创建一个删除所有预期变量的自定义路由。

您的新路线应该尝试匹配

产品/ * /参数1 /值1 /参数2 / VALUE2 /等

如果您知道第一个参数名称是什么,或者甚至是其中任何一个,您可以开始删除URL的部分,这些部分应该留给您动态的东西(使用/,循环,破坏第一个已知的参数)。

以下是实际创建自定义路线的说明: how to get dynamic URL like mydomain.com/username using zend framework

答案 1 :(得分:1)

IMO你这样做是错误的。你应该有一个“更清洁”的路线:

/products/*

如果匹配路由,请从开头获取$_SERVER['request_uri'],剥离/products/并解析类别。以“form”语法(?param1=a&param2=b)添加参数。