现在PHP主要说得就是面向对象,二面向对象中的三大特性封装、继承、多态我们最常用就是封装了,下面我们就来讲解一下在thinkphp中的在公共控制所写的一些功能方法。
public function index() { //列表过滤器,生成查询Map对象 $map = $this->_search(); if (method_exists($this, '_filter')) { $this->_filter($map); } $name = $this->getActionName(); $model = D($name); if (!empty($model)) { $this->_list($model, $map); } $this->display(); return; }
取得操作成功后要返回的URL地址
/** * 取得操作成功后要返回的URL地址 * 默认返回当前模块的默认操作 * 可以在action控制器中重载 * @access public * @return string * @throws ThinkExecption */ function getReturnUrl() { return __URL__ . '?' . C('VAR_MODULE') . '=' . MODULE_NAME . '&' . C('VAR_ACTION') . '=' . C('DEFAULT_ACTION'); }
根据表单生成查询条件
/** * 根据表单生成查询条件 * 进行列表过滤 * @access protected * @param string $name 数据对象名称 * @return HashMap * @throws ThinkExecption */ protected function _search($name = '') { //生成查询条件 if (empty($name)) { $name = $this->getActionName(); } $name = $this->getActionName(); $model = D($name); $map = array(); foreach ($model->getDbFields() as $key => $val) { if (isset($_REQUEST [$val]) && $_REQUEST [$val] != '') { $map [$val] = $_REQUEST [$val]; } } return $map; }
根据表单生成查询条件
/** * 根据表单生成查询条件 * 进行列表过滤 * @access protected * @param Model $model 数据对象 * @param HashMap $map 过滤条件 * @param string $sortBy 排序 * @param boolean $asc 是否正序 * @return void * @throws ThinkExecption */ protected function _list($model, $map, $sortBy = '', $asc = false) { //排序字段 默认为主键名 if (isset($_REQUEST ['_order'])) { $order = $_REQUEST ['_order']; } else { $order = !empty($sortBy) ? $sortBy : $model->getPk(); } //排序方式默认按照倒序排列 //接受 sost参数 0 表示倒序 非0都 表示正序 if (isset($_REQUEST ['_sort'])) { $sort = $_REQUEST ['_sort'] ? 'asc' : 'desc'; } else { $sort = $asc ? 'asc' : 'desc'; } //取得满足条件的记录数 $count = $model->where($map)->count('id'); if ($count > 0) { import("ORG.Util.Page"); //创建分页对象 if (!empty($_REQUEST ['listRows'])) { $listRows = $_REQUEST ['listRows']; } else { $listRows = ''; } $p = new Page($count, $listRows); //分页查询数据 $voList = $model->where($map)->order("`" . $order . "` " . $sort)->limit($p->firstRow . ',' . $p->listRows)->select(); //echo $model->getlastsql(); //分页跳转的时候保证查询条件 foreach ($map as $key => $val) { if (!is_array($val)) { $p->parameter .= "$key=" . urlencode($val) . "&"; } } //分页显示 $page = $p->show(); //列表排序显示 $sortImg = $sort; //排序图标 $sortAlt = $sort == 'desc' ? '升序排列' : '倒序排列'; //排序提示 $sort = $sort == 'desc' ? 1 : 0; //排序方式 //模板赋值显示 $this->assign('list', $voList); $this->assign('sort', $sort); $this->assign('order', $order); $this->assign('sortImg', $sortImg); $this->assign('sortType', $sortAlt); $this->assign("page", $page); } cookie('_currentUrl_', __SELF__); return; }
获取详细信息
/* 获取详细信息 自动获取对应数据表的主键 返回 详细信息 */ function info($name='',$field='') { $name = !empty($name) ? $name : $this->getActionName(); $model = M($name); $id = $_REQUEST [$model->getPk()]; return $info = $model->where('id='.$id)->field($field)->find(); } function update($name='') { $name = !empty($name) ? $name : $this->getActionName(); $model = M($name); if (false === $model->create()) { return false; } // 更新数据 $list = $model->save(); if (false !== $list) { return true; } else { return false; } }
删除指定记录
public function delete() { //删除指定记录 $name = $this->getActionName(); $model = M($name); if (!empty($model)) { $pk = $model->getPk(); $id = $_REQUEST [$pk]; if (isset($id)) { $condition = array($pk => array('in', explode(',', $id))); $list = $model->where($condition)->setField('status', - 1); if ($list !== false) { $this->success('删除成功!'); } else { $this->error('删除失败!'); } } else { $this->error('非法操作'); } } }
添加新数据
function insert() { $name = $this->getActionName(); $model = D($name); if (false === $model->create()) { $this->error($model->getError()); } //保存当前数据对象 $list = $model->add(); if ($list !== false) { //保存成功 $this->success('新增成功!',cookie('_currentUrl_')); } else { //失败提示 $this->error('新增失败!'); } }
删除指定记录
public function foreverdelete() { //删除指定记录 $name = $this->getActionName(); $model = D($name); if (!empty($model)) { $pk = $model->getPk(); $id = $_REQUEST [$pk]; if (isset($id)) { $condition = array($pk => array('in', explode(',', $id))); if (false !== $model->where($condition)->delete()) { $this->success('删除成功!'); } else { $this->error('删除失败!'); } } else { $this->error('非法操作'); } } $this->forward(); }
默认禁用操作
/** * 默认禁用操作 * * @access public * @return string * @throws FcsException */ public function forbid() { $name = $this->getActionName(); $model = D($name); $pk = $model->getPk(); $id = $_REQUEST [$pk]; $condition = array($pk => array('in', $id)); $list = $model->forbid($condition); if ($list !== false) { $this->success('状态禁用成功',$this->getReturnUrl()); } else { $this->error('状态禁用失败!'); } }
状态还原成功,可用于回收站功能
public function recycle() { $name = $this->getActionName(); $model = D($name); $pk = $model->getPk(); $id = $_GET [$pk]; $condition = array($pk => array('in', $id)); if (false !== $model->recycle($condition)) { $this->success('状态还原成功!',$this->getReturnUrl()); } else { $this->error('状态还原失败!'); } }
下面也可以做回收站功能,跟上面的差不多,
public function recycleBin() { $map = $this->_search(); $map ['status'] = - 1; $name = $this->getActionName(); $model = D($name); if (!empty($model)) { $this->_list($model, $map); } $this->display(); }
默认恢复操作
/** * 默认恢复操作 * * @access public * @return string * @throws FcsException */ function resume() { //恢复指定记录 $name = $this->getActionName(); $model = D($name); $pk = $model->getPk(); $id = $_GET [$pk]; $condition = array($pk => array('in', $id)); if (false !== $model->resume($condition)) { $this->success('状态恢复成功!',$this->getReturnUrl()); } else { $this->error('状态恢复失败!'); } }
更新数据对象
function saveSort() { $seqNoList = $_POST ['seqNoList']; if (!empty($seqNoList)) { //更新数据对象 $name = $this->getActionName(); $model = D($name); $col = explode(',', $seqNoList); //启动事务 $model->startTrans(); foreach ($col as $val) { $val = explode(':', $val); $model->id = $val [0]; $model->sort = $val [1]; $result = $model->save(); if (!$result) { break; } } //提交事务 $model->commit(); if ($result !== false) { //采用普通方式跳转刷新页面 $this->success('更新成功'); } else { $this->error($model->getError()); } } }
以上操作可以放在Common功能控制器中,因为实例化对象的时候没有固定M中的名,而是根据控制名对应的数据表值,所以适用于每个控制。
以上资料也是本人从网上收集回来,如有问题可以留言给我,我们可以一起讨论改完。
欢迎来到李清波的PHP博客。