用yii的几点体会

学习yii有一段时间了,很惊人的框架,十分顺手!但是还有点想法:

一是yii里面的autoload,既然重写yii类了,我怎么方便地增加一些自动加载的类呢?现在的$_coreClasses是不可写的。建议给一个机制吧。

我现在是这样解决的:

spl_autoload_register(’__autoload’);

require (dirname(FILE) . ‘/../YiiBase.php’);

class Yii extends YiiBase

{

private static $_yaClasses = array(


    'YTimeZone' => '/ya/i18n/YTimeZone.php',


   //... ...


);





/**


 * 自动加载


 *


 * @param string $className 类名称


 * @return boolean 是否载入成功


 */


static public function autoload ($className)


{


    if (isset(self::$_yaClasses[$className]))


        include YII_PATH . self::$_yaClasses[$className];


}

}

function __autoload ($className)

{

return Yii::autoload($className);

}

感觉很繁琐。

二是,module的语言文件,我希望复制一个module就可以使用其语言文件。但是现在的yii::t()只能加载messages下的文件,不能加载module/abc/messages下的。

我觉得module应该比较独立,所以像语言文件什么的都应该独立放置。我目前的解决方法是重写了t函数,通过yii::t(‘abc/create’, ‘create_success’);的形式来使用module的语言文件。感觉这样很方便。

三是,应该给widgets一个目录,不再放到components目录下面。这样应该更方便管理。

谢谢你的建议。

关于1,我们会考虑添加一个更方便的机制的。你能提交一个GOOGLE TICKET么?

关于2,我们也已意识到这个问题了,我们会考虑提供一个更好的解决办法的。

关于3,这个不是问题。你可以创建widgets目录,然后在app config的import里添加application.widgets.*就可以了。

第一个问题不能写个 Yii::importExt() 直接给$_classes[] 添加数据吗?

回楼上,$_coreClasses是私有属性,重写Yii的时候不能修改这个。

回qiang,我已经提交了一个GOOGLE TICKET。

看到 1.0.10加上咯

public static function registerAutoloader($callback)


{


	spl_autoload_unregister(array('YiiBase','autoload'));


	spl_autoload_register($callback);


	spl_autoload_register(array('YiiBase','autoload'));


}