上一篇中有個問題忘記說了,額,就是最後生成的表單不顯示標籤上的名稱了.....
應該在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,刪除操作也完成了...
....
(後續.....)