我的main.php文件中有以下URL映射。您可以看到我希望参数 id 作为可选
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'urlSuffix' => '/',
'useStrictParsing' => true,
'rules'=>array(
'' => 'site/index',
'<action:(signIn|signUp|logout)>' => 'site/<action>',
'<controller:\w+>(/<id:\d+>)?'=>'<controller>/index',
'<controller:\w+>/<action:\w+>(/<id:\d+>)?'=>'<controller>/<action>',
),
),
使用上述规则如果我使用以下代码创建链接
<?php echo CHtml::link('×', array('index', 'id' => $this->group_id), array('class' => 'linkclose')); ?>
这会在下面创建链接,这是错误的
http://localhost/blog(/872280)?/
它应该产生如下的东西
http://localhost/blog/872280/
如果我没有在链接中传递参数,我的意思是
<?php echo CHtml::link('×', array('index'), array('class' => 'linkclose')); ?>
这会生成
http://localhost/blog/index
这很好。
但是参数传递它会弄乱链接..有人可以帮我吗?感谢
答案 0 :(得分:1)
整个网址规则不是正则表达式。因此,(...)?
等可选组不受尊重。您可以通过指定备用规则来解决此问题:
'rules'=>array(
...
'<controller:\w+>/<id:\d+>'=>'<controller>/index',
'<controller:\w+>'=>'<controller>/index',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),