上一篇中有个问题忘记说了,额,就是最后生成的表单不显示标签上的名称了.....
应该在model中加一个方法... 打开Goods.php 写attributeLabels() 方法,把模型属性字段跟标签名称对应
ok。现在显示正常了.............
【把表单的数据添加到数据库,逻辑部分】
查看用小物件生成的form表单代码 <form id="yw0" action="/shop/index.php?r=backshop/goods/add" method="post">
表单是把数据用post方式提交到 backshop/goods/add 上去了,也就是在 GoodsController 的 actionAdd() 方法中...... 在actionAdd 中打印出来瞅瞅样子....
我只输入了商品名字 其他为空 ,点击提交 数据在 actionAdd 方法中用$_POST 接收之后用var_dump 打印
ok, 是以数组形式提交的。是一个二维数组,可以用 $_POST['Goods'] 接收商品信息
在控制器中接收表单提交过来的数据,调用 save()方法实现数据提交:
20 //商品添加
21 function actionAdd(){
22
23 $goods_model = new Goods();
24
25 //var_dump($_POST);
26 //接收表单提交过来的数据
27 if(isset($_POST['Goods'])){
28
29 //遍历接收到的数组,封装数据到 $goods_model
30 foreach($_POST['Goods'] as $_K=>$_V){
31
32 $goods_model->$_K = $_V;
33 }
34
35 $goods_model->goods_create_time=time();
36
37 //调用save()方法实现数据提交
38 if($goods_model->save()){
39 echo "success...!";
40 }
41 }
42
43 $this->renderPartial('add',array('goods_model'=>$goods_model));
44 }
现在我就输一个名字,哈哈哈,点击添加.....
看下数据库中,有没有刚才添加的一条名字是哈哈哈的记录
.ok,添加数据成功
数据的修改 ----
获得要修改的数据,要展现到表单里面,在表单里面修改数据,然后提交 [也是提交到控制器] ,然后在控制器中接收表单数据执行 update
修改完成后执行 redirect() 方法重定向到商品列表页面
在商品展示列表页面,从修改按钮跳转到 ./index.php?r=backshop/goods/update [GoodsController.php的actionUpdate()方法]
在actionUpdate()方法中,先要查询到具体要修改的是哪条记录,所以要把商品的id通过get传递到控制器,修改链接如下
<td><a href="./index.php?r=backshop/goods/update&id=<?php echo $good->goods_id; ?>">修改</a></td>
在控制器的 actionUpdate()方法中实现代码
46 //修改商品
47 function actionUpdate($id){
48 //通过传过来的id查询具体要修改的商品记录
49 $goods_model = Goods::model(); //除了添加需要(new model()),其他操作都用 Goods::model()来实例化模型
50 //通过主键查询需要修改的数据信息(对象)
51 $goods_info = $goods_model->findByPk($id);
52
53 //传递到视图
54 $this->renderPartial('update',array('goods_model'=>$goods_info));
55 }
56
刷新下点击修改看看效果.....
Yii 框架的小物件是比较猛的,用小物件创建表单.渲染视图的时候已经帮我们把需要修改的记录展示在页面上了,
点击修改的时候数据还是提交到控制器的 actionUpdate()方法里了
<form id="yw0" action="/shop/index.php?r=backshop/goods/update&id=2" method="post">
在控制器调用save()方法实现修改数据的提交
注意:
用 new model() 实例化模型的时候 调用 save() 方法执行的是 insert 操作
用 Goods::model() 实例化模型的时候 调用 save() 方法执行的是 update 操作
ok,实现下代码
46 //修改商品
47 function actionUpdate($id){
48 //通过传过来的id查询具体要修改的商品记录
49 $goods_model = Goods::model(); //除了添加需要(new model()),其他操作都用 Goods::model()来实例化模型
50 //通过主键查询需要修改的数据信息(对象)
51 $goods_info = $goods_model->findByPk($id);
52
53 //修改逻辑跟添加逻辑基本一样 --- 创建表单 -> 收集数据 -> 赋予模型 -> save()
54 if(isset($_POST['Goods'])){
55 foreach($_POST['Goods'] as $_K=>$_V){
56 $goods_info->$_K=$_V;
57 }
58
59 $goods_info->goods_create_time=time();
60
61 if($goods_info->save()){
62 echo "update success...";
63 //如果执行成功,重定向到商品列表页面
64 $this->redirect('./index.php?r=backshop/goods/show');
65 }
66 }
67
68 //传递到视图
69 $this->renderPartial('update',array('goods_model'=>$goods_info));
70 }
我从页面操作 修改名称 哈哈哈 为 呵呵呵 ,看下效果
看下数据库的数据......
ok,修改操作完成
商品信息删除操作...这个比较简单
商品列表 -- 点击 删除 -- 完成数据删除
在 GoodsController 中 写 actionDel() 方法 ... 删除时也需要通过get传递要删除的商品 Id
在 show.php 页面写好删除点击超链接
<td><a href="./index.php?r=backshop/goods/del&id=<?php echo $good->goods_id; ?>">删除</a></td> 【注意要get传递id】
调用 delete方法删除 ,如果删除成功,redirect 重定向到商品列表页面
写下 actionDel 方法代码
//删除信息
79 function actionDel($id){
80 //根据id查找要删除的数据模型对象,通过该对象调用delete方法可以删除
81 $goods_model = Goods::model();
82 $goods_info = $goods_model->findByPk($id);
83
84 if($goods_info->delete()){
85 //如果删除成功,重定向到商品列表
86 $this->redirect('./index.php?r=backshop/goods/show');
87 }
88 }
ok,删除操作也完成了...
....
(后续.....)