0

我有'urlFormat'=>'path''showScriptName'=>falseurlManager.

我有代理/读取作为控制器/动作和 article=>some_name 作为参数。

每当我创建一个链接时,例如: $this->createUrl('proxies/read', array('article'=>$name));

结果是以下类型的 URL:

proxies/read?article=socks5_proxy_list

我想转储查询参数并重新格式化 URL,如下所示:

controller/action/param_name/param_value

在这种情况下,这将是:

proxies/read/article/socks5_proxy_list

我目前的“规则”如下所示:

'rules'=>array(
  '<controller:\w+>/<id:\d+>'=>'<controller>/view',
  '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
  '<controller:\w+>/<action:\w+>/article/<article:\w+>'=>'<controller>/<action>/article/<article>',
  '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),

但他们似乎没有工作。

4

3 回答 3

1
  1. 使这项工作的捷径:

    $this->createUrl('proxies/read/article/'.$name);
    

    并在没有您的自定义规则的情况下保留 urlManager 规则。

  2. 其他方式:

    // urlManager
    'rules'=>array(// order of rules is also important
      '<controller:\w+>/<action:\w+>/article/<article:\w+>'=>'<controller>/<action>',
      '<controller:\w+>/<id:\d+>'=>'<controller>/view',
      '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
      '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
    ),
    

    在上面的数组中,我只是将新规则放在开头,以确保在遇到这种模式时应用该规则。如果您有其他规则,则只需确保此规则出现在可以匹配模式的更通用规则之前。经验法则:更具体的规则应该出现在一般规则之前。

    在视图中创建 url:

    $this->createUrl('proxies/read', array('article'=>$name));
    
  3. 如果您不需要任何默认的“用户友好的 url ”规则,而只需要路径格式的 url,那么您只需指定'urlFormat'=>'path'并将'rules'数组留空或一起省略即可。

如果您还没有阅读权威指南中的URL 管理指南,请阅读。

于 2012-09-12T20:51:16.293 回答
0

不需要规则。。

http://yourhost.com/mycontroller/dosomething/param1/value/param2/value

class MyController extends Controller {
   public function actionDosomething($param1, $param2) {
   }
}

至于 createUrl()。给它一个 key=>value 参数数组作为第二个参数

http://www.yiiframework.com/doc/api/1.1/CController#createUrl-detail

于 2012-09-12T15:49:02.620 回答
0

试试这些规则

'rules'=>array(
  '<controller:\w+>/<id:\d+>'=>'<controller>/view',
  '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',  
  '<controller:\w+>/<action:\w+>/*'=>'<controller>/<action>',
),
于 2012-09-12T17:18:39.000 回答