Yii 常量的轻松管理
来源:互联网 发布:java开发的好玩的游戏 编辑:程序博客网 时间:2024/06/05 18:01
问题
我经常在不同的地方使用模型中的常量(基本状态常量),当常量改变时我不得不在使用每处它的代码中修改。
获取常量
为了解决这个问题我使用了一个方法 getConstants().
[php]public static function getConstants($token,$objectClass) { $tokenLen = strlen($token); $reflection = new ReflectionClass($objectClass); //php built-in $allConstants = $reflection->getConstants(); //constants as array $tokenConstants = array(); foreach($allConstants as $name => $val) { if ( substr($name,0,$tokenLen) != $token ) continue; $tokenConstants[ $val ] = $val; } return $tokenConstants;}
用法示例
为了给每个 ActiveRecord 类添加此方法,我们可以写个基类
[php]class ActiveRecord extends CActiveRecord { /* Get class constants by token. If you set constants with same prefix, like: MY_STATUS_1 MY_STATUS_2 MY_STATUS_3 , you can get it by calling Class::getConstants('MY'); or Class::getConstants('MY_STATUS'); */ public static function getConstants($token,$objectClass) { $tokenLen = strlen($token); $reflection = new ReflectionClass($objectClass); //php built-in $allConstants = $reflection->getConstants(); //constants as array $tokenConstants = array(); foreach($allConstants as $name => $val) { if ( substr($name,0,$tokenLen) != $token ) continue; $tokenConstants[ $val ] = $val; } return $tokenConstants; }}
然后所有的模型类都继承此类而不是 CActiveRecord
[php]class Media extends ActiveRecord { const TYPE_MUSIC = 'music'; const TYPE_VIDEO = 'video'; const TYPE_DOC = 'document'; const STATUS_ACTIVE = 'active'; const STATUS_REMOVED = 'removed'; //...}
在模型规则,方法,或模型外使用 self::getConstants()
[php]class Media extends ActiveRecord {//.. public function rules() { return array( array('type', 'in','range' => self::getConstants('TYPE_',__CLASS__)), ); }//.. public static function getStatuses() { return self::getConstants('STATUS_',__CLASS__); } public static function getTypes() { return self::getConstants('TYPE_',__CLASS__); }}
其他地方
[php]print_r( Media::getConstants('STATUS_','Media') ); //or create Media method and use simplifiedprint_r( Media::getStatuses() );
小结
当然如果你的模型中只有两个常量你可以不使用它,但当你的模型中有大量常量时建议你使用。
链接
0 0
- Yii 常量的轻松管理
- Yii的URL管理
- yii 设置系统常量
- yii定义常量
- Yii的Rbac权限管理组件
- Oracle ERP上线后的轻松管理
- IE9 下载管理,轻松您的下载
- 轻松管理你的网络密码
- 轻松管理你的NodeJs版本
- 统一的常量的存储管理
- YII的重写规则与URL的管理
- Yii的重写规则与URL的管理
- YII的重写规则与URL的管理
- YII的重写规则与URL的管理
- YII url美化管理
- 【Yii】主题管理
- YII url美化管理
- yii 用户管理 controller
- linux 常用基本命令之十一 du
- Yii 自动设置模型的字段值
- 6、模型Bean:Model Bean
- 决策树系列之一决策树的入门教程
- JS 一定要放在 Body 的最底部么?聊聊浏览器的渲染机制
- Yii 常量的轻松管理
- java160116StringMethodDemo
- JAVA并发处理经验(四)并行模式与算法5:并行排序模式-希尔排序
- Hrbust 1041 Chocolate Auction
- java160116StringTest
- ceph学习笔记
- java160116StringTest2
- Android中的事件处理机制
- Java、Android超精确测量代码执行时间差