如何为OpenSearch控制器配置Yii的UrlManager

时间:2011-03-07 07:00:47

标签: php url-routing yii

我正在尝试将OpenSearch功能添加到我的Yii应用程序中,并且无法配置UrlManager以将搜索请求路由到正确的控制器(在本例中称为查询)和方法(称为索引)。如果搜索词中没有空格,搜索效果很好。每当有人搜索多个单词时,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,
),

1 个答案:

答案 0 :(得分:1)

似乎在query/<needle:\w+>中,\w+部分将在第一个非单词字符(例如空格)处停止匹配。将\w更改为更宽容的内容(例如[\w ])可能会有所帮助。