搜索
系统检测到您的用户名不符合规范:

模型自动完成,callback回调函数之我见

浏览:7691 发布日期:2013年05月02日 分类:技术分享
今天写一个模型,需要用到自动完成功能。
众所周知,在create创建数据操作时,会自动验证,然后会自动完成。
自动完成只需要在模型中定义一个$_auto的数组,具体手册里有就不再罗嗦。
$_auto=array(
array('keywords','parsedata',3,'callback')
);
这里定义了一个自动完成规则,对keywords字段调用模型类中的parsedata方法,将返回值填充到keywords字段。
一般情况下,默认调用回调函数的时候,会将keywords默认值当作第一个参数传去进:
function parsedata($data){
...

return $data;//处理过的data
}
这里的$data就是keywords字段默认的值,从表单中传过来的,如果表单中没有,那么这个值就是空的,$data经过parsedata处理后,返回给keywords,作为最终结果用于写入数据库。

那么现在我们有多个字段需要自动完成
$_auto=array(
array('keywords','fillkeywords',3,'callback'),
array('descriptions','filldescriptions',3,'callback'),
);
function fillkeywords($data){
...
}
function filldescriptions($data){
...
}
我们需要分别定义两个回调函数,某些情况下感觉不是很好。

根据手册里写的,一个规则也只有4个参数,只能定义多个回调函数。

老衲觉得不应该这样,就去看了下model.class.php里关于自动完成部分的代码,发现其实自动完成有第五个参数
这个参数是定义除了默认$data以外的其他函数参数,它是一个数组类型
$_auto=array(
array('keywords','autofill',3,'callback',array('arg1','arg2')),

);
这样,我们autofill函数可以这样写
function autofill($data,$arg1,$arg2){
...
}
总之,autofill第一个参数必须是字段默认值,后面的参数是根据auto规则第五个参数按顺序来的。
这样我们不必定义多个回调函数,我是这么做的
$_auto=array(
array('keywords','autofill',3,'callback','keywords'),
array('descriptions','autofill',3,'callback','description'),
);
注:如果第五个参数是字符串,它将被强制转换成数组类型,当然只包含一个元素
function autofill($data,$field){
$return="";
switch($field){
case "keywords":
//处理keywords字段
$return = ......;//此处过程省略
break;
case "description":
//处理description
$return = ..;//此处过程省略
break;
default:
}
return $return;
}
最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
zstxt1989
积分:6535 等级:LV5
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /