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 = "";
            }
最佳答案
评论( 相关
后面还有条评论,点击查看>>