Yii框架开发商城(五)


上一篇中有个问题忘记说了,额,就是最后生成的表单不显示标签上的名称了.....

应该在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,删除操作也完成了...

 ....

 (后续.....)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章