【发布时间】:2011-03-07 07:00:46
【问题描述】:
我正在尝试将 OpenSearch 功能添加到我的 Yii 应用程序中,但在配置 UrlManager 以将搜索请求路由到正确的控制器(在本例中称为 query)和方法(称为 索引)。如果搜索词中没有空格,则搜索效果很好。每当有人搜索多个单词时,UrlManager 都找不到处理搜索的控制器和方法。
search.xml文件中触发搜索的url是这样的:
<Url type="text/html" template="[pathToMyApp]/application/index.php/query/{searchTerms}"/>
而我的 UrlManager 是这样配置的:
'urlManager' => array(
'urlFormat' => 'path',
'rules' => array(
'<_c:(name|tag)>s/*' => '<_c>/index',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'query/suggest/<needle:\w+>'=>'query/suggest', // used to route OpenSearch JSON suggestions - works
'query/findbox'=>'query/findbox', // routes search queries from a form in the application - works
'query/<needle:\w+>'=>'query/index', // works only for search strings with no white space
),
'showScriptName' => true,
),
【问题讨论】:
-
你试过把第二条规则移到底部吗?
-
@Jon - 遗憾的是并没有解决我的问题,但无论如何它更好,即首先进行更具体的匹配。
-
再想一想:在
query/<needle:\w+>中,\w+部分将在第一个非单词字符(例如空格)处停止匹配。也许将\w更改为更宽容的东西(例如[\w ]对于初学者)会起作用吗? -
太棒了!您能否发表您的评论作为答案,以便我接受它以表明问题已解决?
标签: php url-routing yii