现在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博客。