'urlFormat'=>'path'
中有'showScriptName'=>false
和urlManager
。
我有代理/读取控制器/操作和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>',
),
但他们似乎没有工作。
答案 0 :(得分:1)
使这项工作的捷径:
$this->createUrl('proxies/read/article/'.$name);
并保留urlManager规则,而不使用自定义规则。
另一种方式:
// 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>',
),
在上面的数组中,我只是将新规则放在开头,以确保在遇到这种模式时应用该规则。如果您有其他规则,那么只需确保此规则出现在更符合模式的更一般规则之前。经验法则:在一般规则之前应该出现更具体的规则。
在视图中创建网址:
$this->createUrl('proxies/read', array('article'=>$name));
如果您不需要任何默认的“user-friendly url”规则,但只需要路径格式网址,那么您只需指定'urlFormat'=>'path'
并离开{{1}数组为空或一起省略。
如果您还没有,请阅读权威指南中的URL Management guide。
答案 1 :(得分:0)
不需要规则..
http://yourhost.com/mycontroller/dosomething/param1/value/param2/value
class MyController extends Controller {
public function actionDosomething($param1, $param2) {
}
}
和createUrl()一样。将一个key =&gt;值数组参数作为第二个参数
http://www.yiiframework.com/doc/api/1.1/CController#createUrl-detail
答案 2 :(得分:0)
尝试这些规则
'rules'=>array(
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>/*'=>'<controller>/<action>',
),