三个方法搞定全站增、删、改操作

jerry thinkphp 2015年11月18日 收藏
1、此方法适合简单的项目中使用。
2、增、删、改的操作无非都是实例化表或模型,最后返回success或error。
3、涉及到增、删、改的表单我一律采用AJAX提交,在AJAX里实现完成后地址的跳转。
4、新手据此总结,不当或遗漏之处,敬请指正。
########################################################
第一步:在项目的lib/Action中新建CommonAction.class.php;
当然,你也可以写在其他Action里,只是涉及到增、删、改操作的方法继承它就可以。习惯于写在CommonAction.class.php中是因为这三种涉及数据库操作的方法都会经过权限控制,写在这里更方便不是?
-------------------------------------------------------------------------------
第二步:键入代码如下:
  1. <?php
  2. class CommonAction extends Action {

  3.     //删除
  4.     Protected function do_delete($table){
  5.         $id=I('id',0,'intval');//在表单中传入要删除数据的主键ID,否则取0,那么下面就会返回错误,所以不会误删。
  6.         $result=M("$table")->delete($id);//删除就只用M实例化表
  7.         if ($result) {
  8.             $this->success('删除成功!');
  9.         }else{
  10.             $this->error('删除失败!');
  11.         }
  12.     }

  13.     //增加  $arr用于在表单创建以后再添加额外的数据
  14.     Protected function do_add($table,$arr=null){
  15.         $t=D("$table");//D方法实例化$table模型,以确保自动验证的自动完成有效
  16.         if($t->create()){
  17.             if(is_array($arr)){
  18.                foreach($arr as $k=>$v){
  19.                 $t->$k=$v;
  20.                }
  21.             }
  22.             $result=$t->add();
  23.             if($result == false){
  24.                 $this->error('添加失败!');
  25.             }else{
  26.                 $this->success('添加成功!');
  27.             }
  28.         }else{
  29.             $this->error($t->getError());
  30.         }
  31.     }

  32.     //修改  在修改的表单模板,请确保传入了要修改的记录主键ID
  33.     Protected function do_mod($table){
  34.         $t=D("$table");
  35.         if ($t->create()) {
  36.             $result=$t->save();
  37.             if($result == false){$this->error('修改失败!');}else{$this->success('修改成功!');}
  38.         }else{$this->error($t->getError());}
  39.     }
  40. }
-------------------------------------------------------------------------------
用法示例:
  1. <?php
  2. class FormAction extends CommonAction {

  3.     //对Form表进行添加记录
  4.     Public function add () {
  5.         if (IS_POST) {
  6.             parent::do_add('Form'); //调用CommonAction中的do_add方法
  7.         } else {
  8.             $this->display(); //显示添加模板
  9.         }
  10.     }

  11.     //对Form表进行删除记录
  12.     Public function delete () {
  13.         parent::do_del('Form'); //调用CommonAction中的do_del方法
  14.     }

  15.     //对Form表进行修改记录
  16.     Public function modify () {
  17.         if (IS_POST) {
  18.             parent::do_mod('Form'); //调用CommonAction中的do_mod方法
  19.         } else {
  20.             $this->display();
  21.         }
  22.     }

  23.     //在自动完成之外再追加自定义内容
  24.     //发布文章
  25.     Public function addArticle () {
  26.         if(IS_POST){
  27.             $arr=array( //定义和表中字段名为键名,自定义内容为值的数组
  28.                 'creatime' => time(),
  29.                 'authorId' => $_SESSION[C('USER_AUTH_KEY')]
  30.                 );
  31.             // dump($_SESSION);
  32.             parent::do_add('article',$arr); //调用CommonAction中的do_add方法,并传入自定义的内容
  33.         }else{
  34.             $this->assign(array('title'=>'添加文章'))->display();
  35.         }
  36.     }    
  37. }
  38. ?>