入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

Yii中小物件save()方法原理与使用

创建时间:2017-01-20 投稿人: 浏览次数:970

Yii当中使用小物件实现前端数据与后台数据库交互的时候,save()方法应该是比较重要的一个部分,但是之前对于save()方法的理解比较片面。

1、创建对象形式不同,对save()方法调用效果不同

方法一:

插入一条新的记录

$object = new Model();//Model为当前需要的表单创建的模型
if(isset($_POST["Model"])){//用attributes记录传递的值            
    $object -> attributes = $_POST["Model"]; //将Model的在前端页面存入的值保存到数据库中
$object.save()//调用save()方法时,使用的是insert语句

方法二:

更新一条记录

$object = Model::model();//Model为当前需要的表单创建的模型
if(isset($_POST["Model"])){//用attributes记录传递的值            
    $object -> attributes = $_POST["Model"]; //将Model的在前端页面存入的值保存到数据库中
    $object.save()//调用save()方法时,使用的是update语句

以上两个方法,大家应该都比较熟悉。

2、打印save保存错误 的方法

if($user->save) {// 处理
} else {//处理报错
 var_dump($user->getErrors());
}

3、save()方法与Model当中的rules()之间关系

以上内容只是简单的对save()方法的依葫芦画瓢,没有知道其运行时的正真原理,根据之前看过的教学视频和最近使用的经验准备下面详细讲述一下。

1、save()执行时去了哪?

这里写图片描述
1. 表单数据校验save()方法后边有一个环节会执行模型的rules()方法,也就校验表单了。
2. 流程:save()—->validate()—->rules()
3. 验证用户信息:模型->validate()来验证用户信息
4. rules()方法在Model当中定义,在前端页面中对小物件属性进行设置,如果出错可以在前端页面有所展示
这里写图片描述

4、在save()方法执行之前判断输入内容

到这里,一般都不会有什么问题,但是前面的方法一与方法二都是直接获取用户传递的数据,直到执行save()方法,才进行判断是否输入合理正确,有时和我们需要的判断不一致,因为在获取页面提交数据之后,可能还有其他操作,进一步再处理数据,所以这里需要自己定义用户输入的内容,将输入的内容在执行save()方法之前进行判断。
例如:如果为空直接不赋值了,也不需要走到save()进行保存在验证发现出错来提示。

if(isset($_POST["Model"])&&$_POST["Model"]["objectname"] != null){//如果为空直接不赋值了                               
    $trTeam -> attributes = $_POST["Model"]; //用attributes记录传递的值 
    //......
}else{
    Yii::app()->user->setFlash("Failed","名称为空!");
}

这时候需要我们将错误的信息通过一定的方式传递到前端,我采用的是setFlash,在前端用getFlash对其进行获取显示。
Yii setFlash getFlash用法
其余的原理也是类似的,如果直接进行判断,可以提前进行,不要等走到save()才去验证。

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。