您的位置:首页 > 编程语言 > PHP开发

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

2017-01-20 15:02 183 查看
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()才去验证。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  yii 前端 数据库