如何配置路由的默认值?

使用了sidewinder 写的扩展

http://www.yiiframework.com/extension/langhandler/

现在面临创建url的问题。

定义了一个路由规则:


'rules' => array(

    '<lang:(zh_cn|en_us)>/<_c>/<_a>' => '<_c>/<_a>',

),

当前路径:http://abc.com/zh_cn/misc/config

创建url:

createUrl(’/’) --> http://abc.com/lang/zh_cn

createUrl(‘node’) --> http://abc.com/node/lang/zh_cn

createUrl(’/node’) --> http://abc.com/node/lang/zh_cn

createUrl(‘node/’) --> http://abc.com/node/lang/zh_cn

createUrl(‘node/index’) --> http://abc.com/zh_cn/node/index

从上面可以看到,只有把控制器和动作都写完整了,才生成所希望的url,

好像在文档中,也没有看到获取默认控制器索引页的方法?不知道 createUrl(’/’) 是否正确?

我后来自己添加了一些规则如:


'rules' => array(

    '<lang:(zh_cn|en_us)>/<_c>/<_a>' => '<_c>/<_a>',

    '<lang:(zh_cn|en_us)>/<_c>' => '<_c>',

    '<lang:(zh_cn|en_us)>' => 'site',

),

但也未能够很好的生成url,也不够优雅~

我想,是否可以通过设置路由的默认值来解决? 可是看源码,好像没有看到这样的设置参数。

BTW: yii路由是否有个默认规则?还是硬编码到url解析去了?

请教了~

如果你调用的是Yii::app()->createUrl()或Yii::app()->urlManager->createUrl(),那么你应该给出完整的route,因为CUrlManager无法获知缺省的路由信息。

如果你调用的是CController->createUrl(),那么route可以简化。具体参见其API文档。

谢谢!

那么在控制器以外的地方,有没有办法调用 CController->createUrl() 呢?

Yii::app()->controller->createUrl()

graceful!