Yii数据的流向及处理分析
2014-03-18 15:38
316 查看
1、用户从浏览器输入URL(类似http://localhost/myweb/index.php?r=admin/goods/create
2、admin这个Modules下的goods控制器执行create方法
3、create方法首先调用goods Model($model=new Goods()),然后render一个form视图。
4、视图调用后,显示表单给用户,用户输入相应的值,提交上来。
5、提交上来的数据同样是提交到admin/goods/create,这时,$_POST就不再为空了,执行一段入代码,将提交上来的save()进数据库,然后跟转到一个视图。
这时候,如果我们想将提交上来的数据,经过处理后再保存到数据库:
以上是针对增加数据行的操作。
针对修改数据的操作(重点)
1、用户点击修改按钮后,把要修改的ID号从URL上提交过去。
2、admin/goods/update接收到ID后,根据该ID创建了一个模型
3、该模型从数据库中将该ID对应的数据据取出来,保存在模型当中。
这时候,重要的搂据操作,将在render一个视图之前了。在render视图前,我们可以将该模型的数据处理后,再展现到视图中。
以下便是一个很好的用法。
原来的时候goods_color表对应的字段是varchar(32),并不能保存数组,数据经过转换成字符串后,保存到goods_color中了,取出时,是字符串,goods_color被分配到视图时,也会以字符串的形式展示数据,这不符合checkBoxList的要求。所以,可以在这里把处理成goods_color对应的1,3,6形式的数据,处理成array()后,强制性保存到$model->goods_color中,这里,goods_color就变成是数组了。
4、数据显示到视图后,用户修改后,提交,同样是提交到admin/goods/update
5、admin/goods/update这时的$_POST就不为空了,这时,再执行跟create一样的入库存操作。
由此可见,新增数据时,处理的重点在save()之前,修改数据时,重点在render()之前。
2、admin这个Modules下的goods控制器执行create方法
3、create方法首先调用goods Model($model=new Goods()),然后render一个form视图。
4、视图调用后,显示表单给用户,用户输入相应的值,提交上来。
5、提交上来的数据同样是提交到admin/goods/create,这时,$_POST就不再为空了,执行一段入代码,将提交上来的save()进数据库,然后跟转到一个视图。
这时候,如果我们想将提交上来的数据,经过处理后再保存到数据库:
if(isset($_POST['TblGoods'])){ //YII默认把所接收的值一次性分配给model里属性。 $model->attributes=$_POST['TblGoods']; //在这之后,save()之前,我们可能将$model->attributes的数据处理后,再save进去。 //在这可以直接使用$model->属性值 的形式 //yii checkBoxList 的高级使用 //将checkBoxList提交的数据,转换成字符串后再保存到数据库中。 //获取颜色数组后将数组转换成字符串,用豆号分隔。并保存到数据库中。 if(!empty($_POST['TblGoods']['goods_color'])){ //将表单数据处理 $str_color= implode(',', $_POST['TblGoods']['goods_color']); //处理后再保存进属性里 $model->goods_color=$str_color; } //获取颜色数组后将数组转换成字符串,用豆号分隔。并保存到数据库中。 if(!empty($_POST['TblGoods']['goods_size'])){ $str_size= implode(',', $_POST['TblGoods']['goods_size']); $model->goods_size=$str_size; } //处理完后,再保存进去 if($model->save()) $this->redirect(array('view','id'=>$model->goods_id)); }
以上是针对增加数据行的操作。
针对修改数据的操作(重点)
1、用户点击修改按钮后,把要修改的ID号从URL上提交过去。
2、admin/goods/update接收到ID后,根据该ID创建了一个模型
3、该模型从数据库中将该ID对应的数据据取出来,保存在模型当中。
这时候,重要的搂据操作,将在render一个视图之前了。在render视图前,我们可以将该模型的数据处理后,再展现到视图中。
以下便是一个很好的用法。
public function actionUpdate($id){ $model=$this->loadModel($id); //yii checkBoxList 的高级使用 //如果数据库颜色存在颜色数据,先将数据读取出来,转换成数组后,再赋值给$model->goods_color //这时候,在视图那边的checkBoxList将会显示从数据库中存在的值了。 if(!empty($model->goods_color)){ $color=$model->goods_color; $arr_color= explode(',', $color); $model->goods_color=$arr_color; } //如果数据库颜色存在尺寸数据,先将数据读取出来,转换成数组后,再赋值给$model->goods_size //这时候,在视图那边的checkBoxList将会显示从数据库中存在的值了。 if(!empty($model->goods_size)){ $size=$model->goods_size; $arr_size= explode(',', $size); $model->goods_size=$arr_size; } if(isset($_POST['TblGoods'])) { $model->attributes=$_POST['TblGoods']; //获取颜色数组后将数组转换成字符串,用豆号分隔。并保存到数据库中。 if(!empty($_POST['TblGoods']['goods_color'])){ $str_color= implode(',', $_POST['TblGoods']['goods_color']); $model->goods_color=$str_color; } //获取颜色数组后将数组转换成字符串,用豆号分隔。并保存到数据库中。 if(!empty($_POST['TblGoods']['goods_size'])){ $str_size= implode(',', $_POST['TblGoods']['goods_size']); $model->goods_size=$str_size; } if($model->save()) $this->redirect(array('view','id'=>$model->goods_id)); //在render之前,先将数据处理,再调用视图 $this->render('update',array( 'model'=>$model, )); }
原来的时候goods_color表对应的字段是varchar(32),并不能保存数组,数据经过转换成字符串后,保存到goods_color中了,取出时,是字符串,goods_color被分配到视图时,也会以字符串的形式展示数据,这不符合checkBoxList的要求。所以,可以在这里把处理成goods_color对应的1,3,6形式的数据,处理成array()后,强制性保存到$model->goods_color中,这里,goods_color就变成是数组了。
4、数据显示到视图后,用户修改后,提交,同样是提交到admin/goods/update
5、admin/goods/update这时的$_POST就不为空了,这时,再执行跟create一样的入库存操作。
由此可见,新增数据时,处理的重点在save()之前,修改数据时,重点在render()之前。
相关文章推荐
- Yii中Flash数据的处理机制(源码分析)
- 大数据处理分析工具
- 大数据高效复制的处理案例分析总结
- 数据分析与处理之二(Leveldb 实现原理)
- hadoop源码解析之hdfs写数据全流程分析---客户端处理
- 分析python处理基本数据<二>
- live555源码分析----H264的数据处理
- Twitter Storm 实时数据处理框架分析总结
- vlc网络数据流接收处理分析
- python数据分析中的时间处理(2)
- 数据分析处理开源框架杂谈
- 大数据处理分析的六大最好工具
- 数据挖掘-K-近邻分类器-Iris数据集分析-PCA降维处理后显示分类情况(三)
- .NET中RDLC循环处理数据的应用分析
- live555源码分析----H264的数据处理
- yii自带rbac数据表分析
- 机器学习(八)使用sklearn库进行数据分析_——特征处理之过滤、包裹、嵌入型
- 大数据分析与处理
- Spark——为数据分析处理提供更为灵活的赋能
- fMRI数据分析处理原理及方法