文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>如何使用模型的行为插件

如何使用模型的行为插件

时间:2008-04-12  来源:qeeify


模型是 QeePHP 应用程序中用于封装业务逻辑的杀手锏,而行为插件则是把杀手锏变成终极武器的东东。行为插件可以在不修改代码的情况下,透明得改变一个模型的行为,所以称为行为插件。
先说一个最普遍的例子:无限级分类。
存储无限级分类,要么是使用比邻模式,要么是先根遍历算法。FleaPHP 的 SHOP 示例程序中有一个改进过的先根遍历算法,结合了比邻模式和先根遍历两种算法的优点,因此许多开发者都在使用这个算法。
QeePHP 中,有一个名为 tree 的行为插件。只要为模型加上这个行为插件,模型瞬间就可以实现无限级分类存储,并且使用改进型先根遍历算法。
给模型指定要使用的行为插件
在自动生成的模型的代码中,static function __define() 中有一行:
// 指定该 ActiveRecord 要使用的行为插件
'behaviors' => '',
修改这行代码,加入我们要使用的行为插件:
// 指定该 ActiveRecord 要使用的行为插件
'behaviors' => 'tree',
代码方面的准备工作就做好了,数据库方面要根据插件的要求添加一些必要字段。
tree 插件默认使用 parent_id、lft、rgt 存储无限分类。如果你的数据表字段名与此不同,则需要在指定插件的设置。
给行为插件指定配置
还是打开模型的代码文件,在指定行为插件的代码下面修改:

// 指定该 ActiveRecord 要使用的行为插件
'behaviors' => 'tree',
// 指定行为插件的配置
'behaviors_settings' => array(
    'tree' => array(
        'parent_id' => 'parent_cat_id',
        'left' => 'left_value',
        'right' => 'right_value',
    ),
),

这样指定后,tree 行为插件就会使用你指定的字段名处理无限分类。
同时使用多个行为插件
一个模型可以同时使用多个行为插件,例如“'behaviors' => 'fakeuuid, acluser'”。
使用多个行为插件时,唯一要注意的问题是不同的插件之间可能存在冲突,例如两个插件逻辑上就是互相矛盾的。此外,多个插件的加载顺序和其书写顺序相同,因此“'fakeuuid, acluser' 和 'acluser, fakeuuid' 的加载顺序是不同的。
指定多个行为插件后,也可以为多个插件指定设置,类似:
// 指定行为插件的配置
'behaviors_settings' => array(
    'tree' => array(
        .....
    ),
    'acluser' => array(
        .....
    ),
),
QeePHP 内置的一些行为插件
QeePHP 目前只有几个内置的行为插件,分别是:
tree:
采用改进型先根遍历算法的无限级分类存储。
acluser:
为用户模型提供唯一用户名验证、密码自动加密、密码检查、访问控制等功能。
fastuuid:
这个 UUID 插件速度比 fakeuuid 快得多(不需要单独的序列表),而且生成的 uuid 是 64bit 数字,所以可以直接用数据库存储。要说缺点,就是不如 fakeuuid 生成的 id 看上去帅(全部是数字)。但不论处理速度、生成速度、存储占用的空间,都比 fakeuuid 强得多。
fakeuuid:
为模型提供一个伪造的 UUID 主键值,类似 cwN4aFB 等字符串。该插件可以确保对于每个模型,都生成唯一的字符串ID。这个插件最常见的用途就是用在订单、商品等对象上,这样别人就没法从订单和商品ID上猜测出网站的实际用户和业务情况了 :P
行为插件带来了什么?
行为插件不单单改变模型的行为,还可以为模型添加新的方法、新的属性,甚至新的验证规则和事件。
例如 acluser 这个插件会给模型添加下列方法:

  • encodePassword 加密密码
  • checkPassword 检查提供的密码和用户的密码是否相符
  • changePassword 修改用户的密码
  • updateLogin 更新用户的登录信息(累计登录次数、最后登录时间等)
  • getAclData 获得用户的 ACL 信息,用于 QeePHP 的访问控制组件 ACL
  • getAclRoles 获得用户的 ACL 角色信息,用于 QeePHP 的访问控制组件 ACL

而 tree 插件则会添加:

  • createChild 创建一个子节点
  • getSubNodes 返回根节点到指定节点路径上的所有节点
  • getPath 返回指定节点的直接子节点
  • getSubTree 返回指定节点为根的整个子节点树
  • getCurrentLevelNodes 获取指定节点同级别的所有节点
  • allChildCount 计算所有子节点的总数

可以毫不夸张的说,行为插件是绝对黄色、绝对暴力的东西。而且由于 QeePHP 行为插件的机制和 Ruby on Rails(RoR 中称为 acts) 和 CakePHP 类似,所以还可以将其他框架的行为插件移植到 QeePHP 中。相信只要加以时日,更多行为插件将会出现在 QeePHP 中。
原文地址:
http://qeeify.com/index.php/2008/03/27/howto-use-model-behavior.html
更多信息,请访问 FleaPHP/QeePHP 开源开发框架官方网站:
http://www.fleaphp.org/




相关阅读 更多 +
排行榜 更多 +
粉末星战 v1.0.0 安卓版

粉末星战 v1.0.0 安卓版

休闲益智 下载
粉末星战 v1.0.0 安卓版

粉末星战 v1.0.0 安卓版

休闲益智 下载
火线反恐部队 v1.2 安卓版

火线反恐部队 v1.2 安卓版

飞行射击 下载