我想在Yii框架中创建友好的URL。
一个例子:
mysitename.com/country/city/travelling-type
或
mysitename.com/country/city/travelling-type/price
mysitename.com/city/price
等
问题是它会混淆参数。 所以我尝试用下面的代码来解决它,但它还不够好:
'urlManager' => array(
'urlFormat' => 'path',
'appendParams' => true,
'showScriptName' => false,
'useStrictParsing' => FALSE,
'rules' => array(
'<country:\w+>/<city:\w+>/<travelling_type:\w+>/<accommodation:\w+>/<caftering:\w+>/<price_from:\d+/<price_to:\d+>' => 'Travels/list'
),
),
答案 0 :(得分:2)
这并不容易,因为Yii不知道这两个网址之间的区别:
mysitename.com/{city}/{price}
mysitename.com/{city}/{accommodation}
你可以做的是改变这个系统的路线:
'<param1:\w+>/<param2:\w+>/<param3:\w+>/<param4:\w+>/<param5:\w+>/<param6:\d+/<param7:\d+>' => 'Travels/list'
您的操作必须确定哪个查询参数代表搜索查询的哪个参数。在您系统的某些情况下,这应该很容易。例如,国家数量有限,旅行类型可能有限等。
即
如果是
mysitename.com/{city}/{accommodation}
您的系统会根据国家,城市,旅行类型,住宿类型和餐饮类型列表查询“param1”(= city),以确定param1确实是一个城市。然后它将继续使用param2来确定它定义了住宿。
价格更容易识别,因为它们是不同的数据类型(如果旅行搜索引擎整数可能足够好),因此您只需检查价格是否为整数(或类似),即可轻松识别价格。 为了区分price_from和price_to,我建议你假设如果只有一个价格,那就是price_from;如果有两个价格,第一个是price_from,第二个是price_to。 如果您只想设置price_to,请将price_from设置为0。
我希望涵盖你想做的事情。设置起来可能相当复杂,但这是你必须为这样的URL路由支付的价格。 :)