URL管理器 - 操作参数可选和链接创建

时间:2014-01-04 23:12:21

标签: php yii url-rewriting

我的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

这很好。

但是参数传递它会弄乱链接..有人可以帮我吗?感谢

1 个答案:

答案 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>',
),