在THIS问题之后,我设法创建了与Zend_Controller_Route_Regex
一起使用的正则表达式,它不仅匹配必需参数,还匹配可选参数。
拥有以下链接:
fooroute,alles,p0000,1
fooroute,alles,p0000
fooroute,alles
fooroute
从:
开始fooroute,([\+\sa-zA-Z]+),([p0-9]+),(\d+)
我最终关注了正则表达式:
fooroute(?:\,|$)([\+a-zA-Z]+|$)(?:\,|$)([p0-9]+|$)(?:\,|$)([0-9]+|$)
上面列出的链接工作正常。
问题是第一个参数中的\+
似乎没有正常工作。
试图按照以下路线:
fooroute,This+Is+Test,p0000,1
我最终得到Page not found
例外。
我使用regexr.com
构建了我的模式,我的工作结果可以找到HERE。
我缺少什么?
更新 代码:
$router->addRoute(
'www-search-results',
new Zend_Controller_Router_Route_Regex(
'fooroute(?:(?:,([a-z_]+))?(?:,(p\d+))?(?:,(\d+))?)?$',
array(
'module'=>'www',
'controller'=>'index',
'action'=>'searchresults',
'city' => 'alles',
'searchParams' => 'p0000',
'page' => 1
),
array(
'1'=>'city',
'2'=>'searchParams',
'3'=>'page'
)
, 'fooroute,%s,%s,%d'
)
);