php开发(TP框架使用)

  由于最近玩了PHP,我向来有个原则,学一门服务端语言至少得玩两个框架,前段时间用PHP写了些demo+小项目,看见身边有人在使用TP,于是乎鼓捣学习学习。如何学,无非也就是做个小demo;就目前看来现在都PHP框架都是以一个index.php文件作为入口,其他基本上就是路由加映射。

前期准备创建数据库与表:

# ************************************************************
# Sequel Pro SQL dump
# Version 4096
#
# http://www.sequelpro.com/
# http://code.google.com/p/sequel-pro/
#
# Host: 192.168.1.109 (MySQL 5.1.73)
# Database: thinkphp_init
# Generation Time: 2015-12-25 13:28:53 +0000
# ************************************************************


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;


# Dump of table think_admin
# ------------------------------------------------------------

DROP TABLE IF EXISTS `think_admin`;

CREATE TABLE `think_admin` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `adminname` char(60) NOT NULL COMMENT '管理员用户名',
  `password` char(32) NOT NULL COMMENT '密码',
  `email` char(60) NOT NULL COMMENT '邮箱',
  `gender` tinyint(1) NOT NULL COMMENT '性别:1男、2女',
  `tel` varchar(11) NOT NULL COMMENT '手机号',
  `pic` varchar(255) NOT NULL COMMENT '头像的id,在resource表中',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 1:正常 2:删除',
  `login_time` int(11) NOT NULL COMMENT '最后登录时间',
  `login_ip` char(30) NOT NULL COMMENT '最后登录ip',
  `add_time` int(11) NOT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `admin_name` (`adminname`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='管理员表';

LOCK TABLES `think_admin` WRITE;
/*!40000 ALTER TABLE `think_admin` DISABLE KEYS */;

INSERT INTO `think_admin` (`id`, `adminname`, `password`, `email`, `gender`, `tel`, `pic`, `status`, `login_time`, `login_ip`, `add_time`)
VALUES
    (1,'zzz','f3abb86bd34cf4d52698f14c0da1dc60','',0,'','',1,1451048593,'',0),
    (2,'tom','f3abb86bd34cf4d52698f14c0da1dc60','',0,'','',1,1451048593,'',0);

/*!40000 ALTER TABLE `think_admin` ENABLE KEYS */;
UNLOCK TABLES;


# Dump of table think_menu
# ------------------------------------------------------------

DROP TABLE IF EXISTS `think_menu`;

CREATE TABLE `think_menu` (
  `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(125) NOT NULL COMMENT '标题',
  `icon` varchar(125) NOT NULL COMMENT '图标',
  `module_name` varchar(125) NOT NULL COMMENT '模块名',
  `controller_name` varchar(125) NOT NULL COMMENT '控制器名',
  `action_name` varchar(125) NOT NULL COMMENT '方法名',
  `param` varchar(125) NOT NULL COMMENT '参数',
  `replace` varchar(125) NOT NULL COMMENT '替换',
  `remark` varchar(255) NOT NULL COMMENT '介绍',
  `pid` int(11) NOT NULL COMMENT '上级id',
  `path` varchar(255) NOT NULL DEFAULT '0' COMMENT 'pid层级',
  `level` tinyint(1) unsigned NOT NULL COMMENT '层级',
  `view_order` int(11) NOT NULL DEFAULT '0' COMMENT '排序,越大越在前',
  `is_show` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否显示 1:显示',
  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态 1:正常 2:删除',
  `add_time` int(11) NOT NULL COMMENT '添加时间',
  PRIMARY KEY (`id`),
  KEY `level` (`level`),
  KEY `pid` (`pid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='rbac 菜单、节点表';

LOCK TABLES `think_menu` WRITE;
/*!40000 ALTER TABLE `think_menu` DISABLE KEYS */;

INSERT INTO `think_menu` (`id`, `title`, `icon`, `module_name`, `controller_name`, `action_name`, `param`, `replace`, `remark`, `pid`, `path`, `level`, `view_order`, `is_show`, `status`, `add_time`)
VALUES
    (34,'index','','Admin','Index','index','','','',0,'--',3,0,0,1,1450801578),
    (35,'index','','Admin','Admin','','','','',34,'---34',2,0,0,1,1450879911),
    (36,'index','','Admin','Admin','index','','','',35,'---34-35',3,0,0,1,1450879911),
    (37,'index','','Admin','Menu','','','','',34,'---34',2,0,0,1,1450887588),
    (38,'index','','Admin','Menu','index','','','',37,'---34-37',3,0,0,1,1450887588),
    (39,'menu_add','','Admin','Menu','menu_add','','','',37,'---34-37',3,0,0,1,1450887672),
    (40,'menu_save','','Admin','Menu','menu_save','','','',37,'---34-37',3,0,0,1,1450971949),
    (41,'index','','Admin','Admin','index','','','index',0,'0',1,0,0,1,1450972031);

/*!40000 ALTER TABLE `think_menu` ENABLE KEYS */;
UNLOCK TABLES;


# Dump of table think_resource
# ------------------------------------------------------------

DROP TABLE IF EXISTS `think_resource`;

CREATE TABLE `think_resource` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `name` char(255) NOT NULL COMMENT '上传文件的原名',
  `type` char(64) NOT NULL COMMENT '上传文件的MIME类型',
  `size` char(64) NOT NULL COMMENT '大小,单位字节',
  `ext` char(64) NOT NULL COMMENT '后缀名',
  `savename` char(64) NOT NULL COMMENT '保存后的名字',
  `savepath` char(64) NOT NULL COMMENT '保存的路径',
  `add_time` int(11) NOT NULL COMMENT '上传时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='上传资源表,如photo,file';



# Dump of table think_role
# ------------------------------------------------------------

DROP TABLE IF EXISTS `think_role`;

CREATE TABLE `think_role` (
  `id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `pid` smallint(6) NOT NULL,
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 1:正常 2:删除',
  `remark` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `pid` (`pid`),
  KEY `status` (`status`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='角色表';

LOCK TABLES `think_role` WRITE;
/*!40000 ALTER TABLE `think_role` DISABLE KEYS */;

INSERT INTO `think_role` (`id`, `name`, `pid`, `status`, `remark`)
VALUES
    (1,'添加',0,1,'');

/*!40000 ALTER TABLE `think_role` ENABLE KEYS */;
UNLOCK TABLES;


# Dump of table think_role_admin
# ------------------------------------------------------------

DROP TABLE IF EXISTS `think_role_admin`;

CREATE TABLE `think_role_admin` (
  `role_id` int(11) NOT NULL,
  `admin_id` int(11) NOT NULL,
  KEY `group_id` (`role_id`),
  KEY `user_id` (`admin_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='角色和用户的关系表';



# Dump of table think_role_menu
# ------------------------------------------------------------

DROP TABLE IF EXISTS `think_role_menu`;

CREATE TABLE `think_role_menu` (
  `role_id` int(10) unsigned NOT NULL,
  `menu_id` int(10) unsigned NOT NULL,
  `level` tinyint(1) NOT NULL,
  `module` varchar(125) NOT NULL,
  KEY `groupId` (`role_id`),
  KEY `nodeId` (`menu_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='角色和节点菜单的关系表';

LOCK TABLES `think_role_menu` WRITE;
/*!40000 ALTER TABLE `think_role_menu` DISABLE KEYS */;

INSERT INTO `think_role_menu` (`role_id`, `menu_id`, `level`, `module`)
VALUES
    (1,39,0,''),
    (1,40,0,'');

/*!40000 ALTER TABLE `think_role_menu` ENABLE KEYS */;
UNLOCK TABLES;



/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
View Code

第一步:把TP整个包都放在应用工程的根目录下面,再建立一个index.php文件

index.php:

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <[email protected]>
// +----------------------------------------------------------------------

// 应用入口文件

// 检测PHP环境
if(version_compare(PHP_VERSION,'5.3.0','<'))  die('require PHP > 5.3.0 !');

// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define('APP_DEBUG',true);
// 是否开启生成安全文件
define('BUILD_DIR_SECURE', false);


// 定义应用目录
define('APP_PATH','./App/');


// 定义框架目录
define('THINK_PATH', './ThinkPHP/');

// 引入ThinkPHP入口文件
require THINK_PATH.'ThinkPHP.php';

// 亲^_^ 后面不需要任何代码了 就是如此简单
View Code

第二步:配置convention.php

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <[email protected]>
// +----------------------------------------------------------------------

/**
 * ThinkPHP惯例配置文件
 * 该文件请不要修改,如果要覆盖惯例配置的值,可在应用配置文件中设定和惯例不符的配置项
 * 配置名称大小写任意,系统会统一转换成小写
 * 所有配置参数都可以在生效前动态改变
 */
defined('THINK_PATH') or exit();
return  array(
    /* 应用设定 */
    'APP_USE_NAMESPACE'     =>  true,    // 应用类库是否使用命名空间
    'APP_SUB_DOMAIN_DEPLOY' =>  false,   // 是否开启子域名部署
    'APP_SUB_DOMAIN_RULES'  =>  array(), // 子域名部署规则
    'APP_DOMAIN_SUFFIX'     =>  '', // 域名后缀 如果是com.cn net.cn 之类的后缀必须设置    
    'ACTION_SUFFIX'         =>  '', // 操作方法后缀
    'MULTI_MODULE'          =>  true, // 是否允许多模块 如果为false 则必须设置 DEFAULT_MODULE
    'MODULE_DENY_LIST'      =>  array('Common','Runtime'),
    'CONTROLLER_LEVEL'      =>  1,
    'APP_AUTOLOAD_LAYER'    =>  'Controller,Model', // 自动加载的应用类库层 关闭APP_USE_NAMESPACE后有效
    'APP_AUTOLOAD_PATH'     =>  '', // 自动加载的路径 关闭APP_USE_NAMESPACE后有效

    /* Cookie设置 */
    'COOKIE_EXPIRE'         =>  0,    // Cookie有效期
    'COOKIE_DOMAIN'         =>  '',      // Cookie有效域名
    'COOKIE_PATH'           =>  '/',     // Cookie路径
    'COOKIE_PREFIX'         =>  '',      // Cookie前缀 避免冲突
    'COOKIE_HTTPONLY'       =>  '',      // Cookie httponly设置

    /* 默认设定 */
    'DEFAULT_M_LAYER'       =>  'Model', // 默认的模型层名称
    'DEFAULT_C_LAYER'       =>  'Controller', // 默认的控制器层名称
    'DEFAULT_V_LAYER'       =>  'View', // 默认的视图层名称
    'DEFAULT_LANG'          =>  'zh-cn', // 默认语言
    'DEFAULT_THEME'         =>  '',    // 默认模板主题名称
    'DEFAULT_MODULE'        =>  'Admin',  // 默认模块
    'DEFAULT_CONTROLLER'    =>  'Index', // 默认控制器名称
    'DEFAULT_ACTION'        =>  'index', // 默认操作名称
    'DEFAULT_CHARSET'       =>  'utf-8', // 默认输出编码
    'DEFAULT_TIMEZONE'      =>  'PRC',    // 默认时区
    'DEFAULT_AJAX_RETURN'   =>  'JSON',  // 默认AJAX 数据返回格式,可选JSON XML ...
    'DEFAULT_JSONP_HANDLER' =>  'jsonpReturn', // 默认JSONP格式返回的处理方法
    'DEFAULT_FILTER'        =>  'htmlspecialchars', // 默认参数过滤方法 用于I函数...

    /* 数据库设置 */
    'DB_TYPE'               =>  'mysql',     // 数据库类型
    'DB_HOST'               =>  '192.168.1.109', // 服务器地址
    'DB_NAME'               =>  'thinkphp_init',          // 数据库名
    'DB_USER'               =>  'zhenchaowen',      // 用户名Admin
    'DB_PWD'                =>  'zhenchaowen',          // 密码
    'DB_PORT'               =>  '3306',        // 端口
    'DB_PREFIX'             =>  'think_',    // 数据库表前缀
    'DB_FIELDTYPE_CHECK'    =>  false,       // 是否进行字段类型检查
    'DB_FIELDS_CACHE'       =>  true,        // 启用字段缓存
    'DB_CHARSET'            =>  'utf8',      // 数据库编码默认采用utf8
    'DB_DEPLOY_TYPE'        =>  0, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    'DB_RW_SEPARATE'        =>  false,       // 数据库读写是否分离 主从式有效
    'DB_MASTER_NUM'         =>  1, // 读写分离后 主服务器数量
    'DB_SLAVE_NO'           =>  '', // 指定从服务器序号
    'DB_SQL_BUILD_CACHE'    =>  false, // 数据库查询的SQL创建缓存
    'DB_SQL_BUILD_QUEUE'    =>  'file',   // SQL缓存队列的缓存方式 支持 file xcache和apc
    'DB_SQL_BUILD_LENGTH'   =>  20, // SQL缓存的队列长度
    'DB_SQL_LOG'            =>  false, // SQL执行日志记录
    'DB_BIND_PARAM'         =>  false, // 数据库写入数据自动参数绑定

    /* 数据缓存设置 */
    'DATA_CACHE_TIME'       =>  0,      // 数据缓存有效期 0表示永久缓存
    'DATA_CACHE_COMPRESS'   =>  false,   // 数据缓存是否压缩缓存
    'DATA_CACHE_CHECK'      =>  false,   // 数据缓存是否校验缓存
    'DATA_CACHE_PREFIX'     =>  '',     // 缓存前缀
    'DATA_CACHE_TYPE'       =>  'File',  // 数据缓存类型,支持:File|Db|Apc|Memcache|Shmop|Sqlite|Xcache|Apachenote|Eaccelerator
    'DATA_CACHE_PATH'       =>  TEMP_PATH,// 缓存路径设置 (仅对File方式缓存有效)
    'DATA_CACHE_SUBDIR'     =>  false,    // 使用子目录缓存 (自动根据缓存标识的哈希创建子目录)
    'DATA_PATH_LEVEL'       =>  1,        // 子目录缓存级别

    /* 错误设置 */
    'ERROR_MESSAGE'         =>  '页面错误!请稍后再试~',//错误显示信息,非调试模式有效
    'ERROR_PAGE'            =>  '',    // 错误定向页面
    'SHOW_ERROR_MSG'        =>  false,    // 显示错误信息
    'TRACE_MAX_RECORD'      =>  100,    // 每个级别的错误信息 最大记录数

    /* 日志设置 */
    'LOG_RECORD'            =>  false,   // 默认不记录日志
    'LOG_TYPE'              =>  'File', // 日志记录类型 默认为文件方式
    'LOG_LEVEL'             =>  'EMERG,ALERT,CRIT,ERR',// 允许记录的日志级别
    'LOG_FILE_SIZE'         =>  2097152,    // 日志文件大小限制
    'LOG_EXCEPTION_RECORD'  =>  false,    // 是否记录异常信息日志

    /* SESSION设置 */
    'SESSION_AUTO_START'    =>  true,    // 是否自动开启Session
    'SESSION_OPTIONS'       =>  array(), // session 配置数组 支持type name id path expire domain 等参数
    'SESSION_TYPE'          =>  '', // session hander类型 默认无需设置 除非扩展了session hander驱动
    'SESSION_PREFIX'        =>  '', // session 前缀
    //'VAR_SESSION_ID'      =>  'session_id',     //sessionID的提交变量

    /* 模板引擎设置 */
    'TMPL_CONTENT_TYPE'     =>  'text/html', // 默认模板输出类型
    'TMPL_ACTION_ERROR'     =>  THINK_PATH.'Tpl/dispatch_jump.tpl', // 默认错误跳转对应的模板文件
    'TMPL_ACTION_SUCCESS'   =>  THINK_PATH.'Tpl/dispatch_jump.tpl', // 默认成功跳转对应的模板文件
    'TMPL_EXCEPTION_FILE'   =>  THINK_PATH.'Tpl/think_exception.tpl',// 异常页面的模板文件
    'TMPL_DETECT_THEME'     =>  false,       // 自动侦测模板主题
    'TMPL_TEMPLATE_SUFFIX'  =>  '.html',     // 默认模板文件后缀
    'TMPL_FILE_DEPR'        =>  '/', //模板文件CONTROLLER_NAME与ACTION_NAME之间的分割符
    // 布局设置
    'TMPL_ENGINE_TYPE'      =>  'Think',     // 默认模板引擎 以下设置仅对使用Think模板引擎有效
    'TMPL_CACHFILE_SUFFIX'  =>  '.php',      // 默认模板缓存后缀
    'TMPL_DENY_FUNC_LIST'   =>  'echo,exit',    // 模板引擎禁用函数
    'TMPL_DENY_PHP'         =>  false, // 默认模板引擎是否禁用PHP原生代码
    'TMPL_L_DELIM'          =>  '{',            // 模板引擎普通标签开始标记
    'TMPL_R_DELIM'          =>  '}',            // 模板引擎普通标签结束标记
    'TMPL_VAR_IDENTIFY'     =>  'array',     // 模板变量识别。留空自动判断,参数为'obj'则表示对象
    'TMPL_STRIP_SPACE'      =>  true,       // 是否去除模板文件里面的html空格与换行
    'TMPL_CACHE_ON'         =>  true,        // 是否开启模板编译缓存,设为false则每次都会重新编译
    'TMPL_CACHE_PREFIX'     =>  '',         // 模板缓存前缀标识,可以动态改变
    'TMPL_CACHE_TIME'       =>  0,         // 模板缓存有效期 0 为永久,(以数字为值,单位:秒)
    'TMPL_LAYOUT_ITEM'      =>  '{__CONTENT__}', // 布局模板的内容替换标识
    'LAYOUT_ON'             =>  false, // 是否启用布局
    'LAYOUT_NAME'           =>  'layout', // 当前布局名称 默认为layout

    // Think模板引擎标签库相关设定
    'TAGLIB_BEGIN'          =>  '<',  // 标签库标签开始标记
    'TAGLIB_END'            =>  '>',  // 标签库标签结束标记
    'TAGLIB_LOAD'           =>  true, // 是否使用内置标签库之外的其它标签库,默认自动检测
    'TAGLIB_BUILD_IN'       =>  'cx', // 内置标签库名称(标签使用不必指定标签库名称),以逗号分隔 注意解析顺序
    'TAGLIB_PRE_LOAD'       =>  '',   // 需要额外加载的标签库(须指定标签库名称),多个以逗号分隔 
    
    /* URL设置 */
    'URL_CASE_INSENSITIVE'  =>  true,   // 默认false 表示URL区分大小写 true则表示不区分大小写
    'URL_MODEL'             =>  1,       // URL访问模式,可选参数0、1、2、3,代表以下四种模式:
    // 0 (普通模式); 1 (PATHINFO 模式); 2 (REWRITE  模式); 3 (兼容模式)  默认为PATHINFO 模式
    'URL_PATHINFO_DEPR'     =>  '/',    // PATHINFO模式下,各参数之间的分割符号
    'URL_PATHINFO_FETCH'    =>  'ORIG_PATH_INFO,REDIRECT_PATH_INFO,REDIRECT_URL', // 用于兼容判断PATH_INFO 参数的SERVER替代变量列表
    'URL_REQUEST_URI'       =>  'REQUEST_URI', // 获取当前页面地址的系统变量 默认为REQUEST_URI
    'URL_HTML_SUFFIX'       =>  'html',  // URL伪静态后缀设置
    'URL_DENY_SUFFIX'       =>  'ico|png|gif|jpg', // URL禁止访问的后缀设置
    'URL_PARAMS_BIND'       =>  true, // URL变量绑定到Action方法参数
    'URL_PARAMS_BIND_TYPE'  =>  0, // URL变量绑定的类型 0 按变量名绑定 1 按变量顺序绑定
    'URL_PARAMS_FILTER'     =>  false, // URL变量绑定过滤
    'URL_PARAMS_FILTER_TYPE'=>  '', // URL变量绑定过滤方法 如果为空 调用DEFAULT_FILTER
    'URL_ROUTER_ON'         =>  false,   // 是否开启URL路由
    'URL_ROUTE_RULES'       =>  array(), // 默认路由规则 针对模块
    'URL_MAP_RULES'         =>  array(), // URL映射定义规则

    /* 系统变量名称设置 */
    'VAR_MODULE'            =>  'm',     // 默认模块获取变量
    'VAR_ADDON'             =>  'addon',     // 默认的插件控制器命名空间变量
    'VAR_CONTROLLER'        =>  'c',    // 默认控制器获取变量
    'VAR_ACTION'            =>  'a',    // 默认操作获取变量
    'VAR_AJAX_SUBMIT'       =>  'ajax',  // 默认的AJAX提交变量
    'VAR_JSONP_HANDLER'     =>  'callback',
    'VAR_PATHINFO'          =>  's',    // 兼容模式PATHINFO获取变量例如 ?s=/module/action/id/1 后面的参数取决于URL_PATHINFO_DEPR
    'VAR_TEMPLATE'          =>  't',    // 默认模板切换变量

    'HTTP_CACHE_CONTROL'    =>  'private',  // 网页缓存控制
    'CHECK_APP_DIR'         =>  true,       // 是否检查应用目录是否创建
    'FILE_UPLOAD_TYPE'      =>  'Local',    // 文件上传方式
    'DATA_CRYPT_TYPE'       =>  'Think',    // 数据加密方式

);
View Code

第三步:编写相应的control和view:

例子:

AdminController.class.php:

<?php
/**
 * ThinkPHP的命名空间使用规范。注意:命名空间定义必须写在所有的PHP代码之前声明,否则会出错
 * 命名空间和实际的控制器文件所在的路径是一致的,
 */
namespace Admin\Controller;

use Admin\Controller\CommonController;
use Org\Util\Rbac;
class AdminController extends CommonController {
    protected $page_num = 10;

    public function index(){
        $status = I('status', 0);
        $keyword = I('keyword', '');
        $list = array();
        $where = array ();
        if ($status) {
            $where['status'] = $status;
        }
        $this->assign('status', $status);
        if ($keyword) {
            $where['adminname'] = array('like', "%{$keyword}%");
        }
        $this->assign('keyword', $keyword);

        $model = D('Admin');
        $count = $model->where ($where)->count (); // 查询满足要求的总记录数
        $page = new \Admin\Org\Page ($count, $this->page_num); // 实例化分页类 传入总记录数和每页显示的记录数
        // 进行分页数据查询 注意limit方法的参数要使用Page类的属性
        $order = 'id asc';
        $list = $model->where($where)->order($order)->limit($page->firstRow.','.$page->listRows)->select();

        $show = $page->pageShow (); // 分页显示输出

        $this->assign ( 'list', $list ); // 赋值数据集
        $this->assign ( 'page', $show ); // 赋值分页输出
        $this->display(); // 输出模板
    }

    public function admin_add(){
        $id = I('id', 0);

        $model = D('Admin');
        $info = false;
        $role_user = array();
        if ($id) {
            $info = $model->find($id);
            // 角色与用户关系
            $role_user = D('Role_admin')->where(array('admin_id' => $id))->getField('role_id', true);
        }

        $role_list = D('Role')->where(array('status' => 1))->select();
        if ($role_list) {
            foreach ($role_list as &$val) {
                if (in_array($val['id'], $role_user)) {
                    $val['is_selected'] = 1;
                } else {
                    $val['is_selected'] = 0;
                }
            }
        }
        $this->assign('role_list', $role_list);
        $this->assign('info', $info);
        $this->display();
    }

    public function save(){
        $id = I('id', 0);
        $adminname = I('adminname', '');
        $password = I('password', '');
        $re_password = I('re_password', '');
        $role_id = I('role_id', array());
        if (empty($adminname)) {
            $this->out('error', '请填写用户名');
        }
        $model = D('Admin');
        // 验证通过 可以进行其他数据操作
        unset($_POST['role_id']);
        if (empty($id)) {
            $_POST['password'] = md5($password);
            $_POST['re_password'] = md5($re_password);
            $_POST['add_time'] = time();
            $tmp = $model->create();
            if (!$tmp){
                // 如果创建失败 表示验证没有通过 输出错误提示信息
                $this->out('error', $model->getError());
            }
            $result = $model->add();
            $id = $result;
        } else {
            $where['adminname'] = $adminname;
            $where['id'] = array('neq', $id);
            $info = $model->where($where)->find();
            if ($info) {
                $this->out('error', '该名称已经存在了!');
            }
            if (!empty($password) && !empty($re_password)) {
                if ($password != $re_password) {
                    $this->out('error', '密码与确认密码不一致!');
                }
                $_POST['password'] = md5($password);
                unset($_POST['re_password']);
            } else {
                unset($_POST['password']);
                unset($_POST['re_password']);
            }
            $result = $model->save($_POST);
        }

        $model_role_admin = D('Role_admin');
        // 先删除,再插入 ,角色与用户对应关系
        $resu = $model_role_admin->where(array('admin_id' => $id))->delete();
        if ($role_id) {
            if ($role_id) {
                foreach ($role_id as $val) {
                    $data['role_id'] = $val;
                    $data['admin_id'] = $id;
                    $re = $model_role_admin->data($data)->add();
                }
            }
        }
        if ($result || $resu || $re) {
            $this->out('ok', '保存成功');
        } else {
            $this->out('error', '保存失败');
        }
    }

    // 用户删除 加入回收站
    public function delete(){
        $id = I('id', 0);
        if (empty($id)) {
            $this->out('error', '请选择要删除的记录!');
        }
        $model = D('Admin');

        $arr = explode(',', $id);
        $data['id'] = array('in', $arr);
        $data['status'] = 2;
        $result = $model->save($data);
        if ($result) {
            $this->out('ok', '删除成功');
        } else {
            $this->out('error', '删除失败');
        }
    }

    // 用户还原
    public function reduction(){
        $id = I('id', 0);
        if (empty($id)) {
            $this->out('error', '请选择要还原的记录!');
        }
        $model = D('Admin');

        $arr = explode(',', $id);
        $data['id'] = array('in', $arr);
        $data['status'] = 1;
        $result = $model->save($data);

        if ($result) {
            $this->out('ok', '还原成功');
        } else {
            $this->out('error', '还原失败');
        }
    }

    // 用户彻底删除
    public function delete_really(){
        $id = I('id', 0);
        if (empty($id)) {
            $this->out('error', '请选择要还原的记录!');
        }
        $model = D('Admin');
        $arr = explode(',', $id);
        $data['id'] = array('in', $arr);

        $result = $model->where($data)->delete($data);

        if ($result) {
            $this->out('ok', '还原成功');
        } else {
            $this->out('error', '还原失败');
        }
    }
}
View Code

view:

<include file="Public/side" />

<div class="col-xs-9" role="main">
    <form action='__URL__/index' id="js_search" method="get">
        <ol class="breadcrumb">
            <li class="active">
                <table>
                    <tr>
                        <td>
                            <a href="__URL__/index/status/0"><span class="label <if condition='$status eq 0'>label-default<else/>label-info</if>">全部</span></a> 
                            <a href="__URL__/index/status/1"><span class="label <if condition='$status eq 1'>label-default<else/>label-success</if>">正常</span></a>
                            <a href="__URL__/index/status/2"><span class="label <if condition='$status eq 2'>label-default<else/>label-warning</if>">回收站</span></a>
                        </td>
                        <td>
                            <input type="text" class="form-control" name="keyword" value="{$keyword}" placeholder="用户名" style="float: left;">
                        </td>

                        <td><button type="submit" class="btn btn-sm btn-primary">搜索</button></td>
                        <td colspan="2">
                            <span class="nav-addbtn">
                            <a href="/article/edit/id/0">
                                <a href="__URL__/admin_add" class="btn btn-sm btn-success" style="float:right;">添加管理员</a>
                            </a>
                            </span>
                        </td>
                    </tr>
                </table>
            </li>
        </ol>
    </form>
    <div class="table-responsive">
        <table class="table table-striped">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>用户名</th>
                    <th>性别</th>
                    <th>邮箱</th>
                    <th>电话</th>
                    <th>最后登录时间</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>
                <volist name="list" id="val">
                    <tr>
                        <td>{$val.id}</td>
                        <td>{$val.adminname}</td>
                        <td>{$val.gender}</td>
                        <td>{$val.email}</td>
                        <td>{$val.tel}</td>
                        <td>{$val.login_time|date='Y-m-d H:i:s', ###}</td>
                        <td>
                            <a href="__URL__/admin_add/id/{$val.id}" class="btn btn-primary btn-xs">编辑</a>
                            <if condition="$val.status eq 1">
                                <a href="__URL__/delete/id/{$val.id}" class="btn btn btn-warning btn-xs delete_one">删除</a>
                            <else />
                                <a href="__URL__/reduction/id/{$val.id}" class="btn btn-success btn-xs reduction">还原</a>
                                <a href="__URL__/delete_really/id/{$val.id}" class="btn btn-danger btn-xs delete_really">彻底删除</a>
                            </if>
                        </td>
                    </tr>
                
                </volist>
            </tbody>
        </table>
        
        <div class="my_page">
            {$page}
        </div>
    </div>
</div>

<script type="text/javascript">
//var $status = '{$status}';
</script>


<include file="Public/footer" />
View Code

访问应用:

http://mysites:8405/Thinkphp_init-master/index.php/Admin/Menu/index

如图:

php开发(TP框架使用)_第1张图片

参考:

https://github.com/super-d2/codeigniter_demo

http://www.thinkphp.cn/info/122.html

http://www.thinkphp.cn/document/308.html

 

你可能感兴趣的:(php开发(TP框架使用))