Php 如何配置Yii';OpenSearch控制器的UrlManager

Php 如何配置Yii';OpenSearch控制器的UrlManager,php,url-routing,yii,Php,Url Routing,Yii,我试图将OpenSearch功能添加到我的Yii应用程序中,但在配置UrlManager以将搜索请求路由到正确的控制器(在本例中称为查询)和方法(称为索引)时遇到问题。如果搜索词中没有空格,搜索效果会很好。每当有人搜索多个单词时,UrlManager都无法找到处理搜索的控制器和方法 search.xml文件中触发搜索的url如下所示: <Url type="text/html" template="[pathToMyApp]/application/index.php/query/{sea

我试图将OpenSearch功能添加到我的Yii应用程序中,但在配置UrlManager以将搜索请求路由到正确的控制器(在本例中称为查询)和方法(称为索引)时遇到问题。如果搜索词中没有空格,搜索效果会很好。每当有人搜索多个单词时,UrlManager都无法找到处理搜索的控制器和方法

search.xml文件中触发搜索的url如下所示:

<Url type="text/html" template="[pathToMyApp]/application/index.php/query/{searchTerms}"/>
'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,
),

我的UrlManager配置如下:

<Url type="text/html" template="[pathToMyApp]/application/index.php/query/{searchTerms}"/>
'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,
),
'urlManager'=>数组(
“urlFormat”=>“路径”,
'规则'=>数组(
's/*'=>'/index',
'//' => '/',
'query/suggest/'=>'query/suggest',//用于路由OpenSearch JSON建议-works
'query/findbox'=>'query/findbox',//从应用程序-works中的表单路由搜索查询
“query/”=>“query/index”,//仅适用于不带空格的搜索字符串
),
'showScriptName'=>true,
),

查询中,
\w+
部分似乎会在第一个非单词字符(例如空格)处停止匹配。将
\w
更改为更宽容的内容(例如
[\w]
)可能会起作用。

查询/
中,
\w+
部分将在第一个非单词字符(例如空格)处停止匹配。将
\w
更改为更宽容的规则(例如
[\w]
)可能会奏效。

您是否尝试过将第二条规则移到底部?@Jon-遗憾的是,这并不能解决我的问题,但无论如何,最好先进行更具体的匹配。仔细想想:在
查询/
中,
\w+
部分将在第一个非单词字符(例如空格)处停止匹配。也许将
\w
更改为更宽容的内容(例如,对于初学者来说,
[\w]
)会起到作用?太好了!你能把你的评论作为一个答案,这样我就可以接受它来表明问题已经解决了吗?你有没有试着把第二条规则移到底部?@Jon-很遗憾,这并不能解决我的问题,但无论如何,它在那里会更好,即先进行更具体的匹配。再想一想:在
查询/
中,
\w+
部分将在第一个非单词字符(例如空格)处停止匹配。也许将
\w
更改为更宽容的内容(例如,对于初学者来说,
[\w]
)会起到作用?太好了!你能把你的评论作为一个答案,这样我就可以接受它,以表明问题已经解决了吗?