注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

牧野流星

每个人心中都有一个梦想..........

 
 
 

日志

 
 

Thinkphp 模型自动完成,callback回调函数 传递参数  

2015-03-26 23:30:34|  分类: ThinkPHP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
用Thinkphp写一个模型的时候,要用到自动完成。
有好几个参数都需要用到同样的方法。
如果自动完成可以传递参数就好了。但是手册里面并没有提到,在网上搜到了如下的文章。
文章来源:http://www.thinkphp.cn/topic/1518.html

自动完成只需要在模型中定义一个$_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;
}

经过本人的实践发现了一个问题。
比如$_auto=array(
array('keywords','autofill',3,'callback','keywords'),
);
keywords表单的值为空,autofill函数就不能获取到第五个参数,只能获取到第一个参数。
  评论这张
 
阅读(3796)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018