【问题标题】:How to configure Yii's UrlManager for OpenSearch controller如何为 OpenSearch 控制器配置 Yii 的 UrlManager
【发布时间】: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/&lt;needle:\w+&gt; 中,\w+ 部分将在第一个非单词字符(例如空格)处停止匹配。也许将\w 更改为更宽容的东西(例如[\w ] 对于初学者)会起作用吗?
  • 太棒了!您能否发表您的评论作为答案,以便我接受它以表明问题已解决?

标签: php url-routing yii


【解决方案1】:

似乎在query/&lt;needle:\w+&gt; 中,\w+ 部分将在第一个非单词字符(例如空格)处停止匹配。将\w 更改为更宽容的名称(例如[\w ])可能会奏效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多