yii在console中normalizeUrl/createUrl返回文件路径的问题

在yii中,有时候会调用CHtml的normalizeUrl去生成一个url。调用它的好处是当配置文件中的urlManager中url的映射的rules发生变化时,它也会自动发生变化。但如果在console中你调用同样的方法,得到的却是类似“项目protect绝对路径/xxxxx/xxx.html”,而不是你希望的http:/www.yyyy.com/xxxx/xxx.html这样的结果。原因很简单因为调用console是本地调用,而不是一个http请求,自然就没有host信息。所以它只能返回给你一个路径。我在网上搜索到的解决办法大概是在console的配置文件里声明request的配置信息。但感觉修改配置文件的方式不太好,影响全局,不知道会不会对应用的其它地方造成影响。我的办法是,在程序需要进行url转换之前动态的修改baseurl,类似于这样:

Yii::app()->getRequest()->setBaseUrl(“http://www.sudodev.cn”);

当然,如果要保证生成的url跟网站上的一致,你需要把yiic.php中的console.php配置文件改成main.php,如果你在main.php指定的urlmanager的rules的话(比如伪静态化)。