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()才去验证。