关于 ThinkPHP5.0.6 的模型类的一个小问题

浏览:1342 发布日期:2017/02/10 分类:系统代码 关键字: Model,模型,验证,ThinkPHP5
模型类配合验证类验证用户输入的时候,如果前台传入的是空数组,模型类即使没执行过get方法,直接使用save()方法保存,它会跳过验证,直接写入数据库
例如控制器中有如下代码$data = [];
$Model = new Articles();
$result = $Model->allowField(true)->validate(true)->save($data);
即使Articles验证器存在,并且有 title => require 规则,模型也会跳过验证,直接向数据库写入空数据。若数据库的title字段设置了NOT NULL属性,则会发生数据库错误,若设置了NULL,则会插入一条空数据。

在think\Model类788行save方法代码中public function save($data = [], $where = [], $sequence = null)
    {
        if (!empty($data)) {
            // 数据自动验证
            if (!$this->validateData($data)) {
                return false;
            }
$data参数默认值是空数组,并且自动验证的条件是$data不为空。所以会发生传入空数组则跳过验证的情况。

修改save方法    public function save($data = null, $where = [], $sequence = null)
    {
        if (is_array($data)) {
将$data参数默认值设为null,判定条件改为 is_array($data)这样就能在用户输入空数据时自动验证了

这个问题从5开始到5.0.6都有
不知道我说的场景大家会不会遇到,也不知道这算不算官方的bug。若有其他解决方案还请大家指导
评论( 相关
后面还有条评论,点击查看>>