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

Model单例模式导致框架的一个bug

浏览:1373 发布日期:2014年08月21日 分类:求助交流
场景:实例化一个带有_validate属性(自动验证)的Model,当调用create方法时,有验证规则没有验证通过,于是对不通过的元素进行默认值的设置后再调用create方法,此时还是会显示验证不通过。
分析:在autoValidation($data,$type)方法中有以下代码if(!empty($this->error)) return false;由于默认通过D或M方法实例化时是单例,如果有一次执行create方法验证不通过,那么在对象中error就永远会有值,这就会导致不管如何修改数组,永远都不可能验证通过。
引申问题:在实际应用中,如果验证不通过,一般就会返回到界面让用户进行处理。但这种单例模式很可能带来其它潜在问题。
建议解决方案:
1、在D和M方法中增加参数,提供强制创建一个新对象的机制。
2、在调用create这些方法时,把那些不是由用户创建的、非固定的属性删除掉,从数据层面让这个单例看起来就是一个新的对象。

一个制标的方法:
if($this->patchValidate) { // 重置验证错误信息
$this->error = array();
}
改为:if($this->patchValidate) { // 重置验证错误信息
$this->error = array();
}
else {
$this->error = "";
}
最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
nepalon
积分:181 等级:LV1
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

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

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