## 在线体验
[http://tpadmin.yuan1994.com](http://tpadmin.yuan1994.com)
默认管理员帐号:admin,默认管理员密码:123456
## 仓库地址
[https://github.com/yuan1994/tpadmin](https://github.com/yuan1994/tpadmin)
## 使用方法
### composer安装:
composer create-project yuan1994/tpadmin tpadmin --prefer-dist
### git克隆:
git clone https://github.com/yuan1994/tpadmin
### 直接下载:
https://github.com/yuan1994/tpadmin/archive/master.zip
>[info]框架的依赖需要通过 composer 下载,请在框架根目录执行 composer update ,已确保依赖的类库能下载下来
##部署
参考 [ThinkPHP5 - 部署](http://www.kancloud.cn/manual/thinkphp5/129745)
部署成功后,建立新建数据库 tpadmin,导入项目根目录的 tpadmin.sql 文件,默认管理员帐号:admin,默认管理员密码:123456
如果是配置了虚拟域名并且虚拟域名指向了项目根目录的 `public` 文件夹,那么访问 `http://your-tpadmin-root-domain/admin` 即可,如果没有配置虚拟域名,那么访问 `http://localhost/tpadmin/public/admin` ,如果配置了虚拟域名但是虚拟域名指向的是项目根目录,那么访问 `http://your-tpadmin-root-domain/public/admin` 请对号入座,如果是 `Apache` 推荐第二种
>[info] 如果部署中出现任何问题,请网上搜索自己解决,已在 PHP 5.5 以上版本,Windows/MacOS/Linux 的 Apache/Nginx 服务器上都测试没问题,请节约大家的时间
>[info] 已开启伪静态模式,会隐藏 index.php 入口文件
## 开发规范
请参考ThinkPHP5官方开发规范 [ThinkPHP5 - 开发规范](http://www.kancloud.cn/manual/thinkphp5/118007)
## 升级警告
**ThinkPHP5.0 正式版有一些不适合管理后台需求,做了如下修改,请务必修改下面所示,以后升级必须检查此两处是否有做修复,自己升级 ThinkPHP 版本后一定要修改下面两处**
>[info] **为了支持 include 标签引入文件模板自动定位,修改了文件 `thinkphp/library/think/Template.php` 的 `parseTemplateName` 方法:**
```
/**
* 分析加载的模板文件并读取内容 支持多个模板文件读取
* @access private
* @param string $templateName 模板文件名
* @return string
*/
private function parseTemplateName($templateName)
{
$array = explode(',', $templateName);
$parseStr = '';
foreach ($array as $templateName) {
if (empty($templateName)) {
continue;
}
if (0 === strpos($templateName, '$')) {
//支持加载变量文件名
$templateName = $this->get(substr($templateName, 1));
}
/****************** 修改开始 ********************/
// 解决模板 include 标签不支持自动定位当前控制器的问题
if (!preg_match("/(\/|\:)/", $templateName)) {
$templateName = str_replace(".", DS, \think\Loader::parseName(\think\Request::instance()->controller())) . DS . $templateName;
}
/****************** 修改结束 ********************/
$template = $this->parseTemplateFile($templateName);
if ($template) {
// 获取模板文件内容
$parseStr .= file_get_contents($template);
}
}
return $parseStr;
}
```
>[info] **为了支持多级控制器,`\think\Url::build` 方法有bug,`\think\Url::build("one.two.Three")` 会生成 `one.two._three` 的链接,正确的应该是 `one.two.three`,修改了文件 `thinkphp/library/think/Loader.php` 的 `parseName` 方法:**
**ThinkPHP 5.0.4及以上版本请按此修改:**
```
/**
* 字符串命名风格转换
* type 0 将Java风格转换为C的风格 1 将C风格转换为Java的风格
* @param string $name 字符串
* @param integer $type 转换类型
* @param bool $ucfirst 首字母是否大写(驼峰规则)
* @return string
*/
public static function parseName($name, $type = 0, $ucfirst = true)
{
/****************** 修改开始 ********************/
if ($type) {
return preg_replace_callback(['/\_([a-zA-Z])/', '/([^.][a-zA-Z]*$)/'], function ($match) use ($ucfirst) {
return $ucfirst ? ucfirst($match[1]) : lcfirst($match[1]);
}, $name);
} else {
return strtolower(preg_replace('/((?<=[a-z])(?=[A-Z]))/', '_', $name));
}
/****************** 修改结束 ********************/
/* if ($type) {
$name = preg_replace_callback('/_([a-zA-Z])/', function ($match) {
return strtoupper($match[1]);
}, $name);
return $ucfirst ? ucfirst($name) : lcfirst($name);
} else {
return strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $name), "_"));
}*/
}
```
**ThinkPHP 5.0.3及以下版本请按此修改:**
```
/**
* 字符串命名风格转换
* type 0 将Java风格转换为C的风格 1 将C风格转换为Java的风格
* @param string $name 字符串
* @param integer $type 转换类型
* @return string
*/
public static function parseName($name, $type = 0)
{
/****************** 修改开始 ********************/
if ($type) {
return preg_replace_callback(['/\_([a-zA-Z])/', '/([^.][a-zA-Z]*$)/'], function ($match) {
return ucfirst($match[1]);
}, $name);
} else {
return strtolower(preg_replace('/((?<=[a-z])(?=[A-Z]))/', '_', $name));
}
/****************** 修改结束 ********************/
}
```
## 注意
>[warning] 为了确保代码自动生成可用,请在 Linux/MacOS 系统上使用项目时保证 application 文件夹有可写权限,本地开发可用将文件夹的权限改为 777,线上部署请注意修改成安全的权限
- 概要
- 开始使用
- 写在前面
- 目录结构
- 模板主题支持
- 前置方法before支持
- 数据返回
- 异常接管
- Rbac 权限管理
- 开始使用
- 用户管理
- 分组管理
- 节点管理
- 角色管理
- 使用流程
- 其他
- 代码自动生成 v1.2
- 示例一 - 一级控制器
- 示例二 - 多级控制器
- 示例三 - 从数据表生成
- 示例四 - 指定生成的文件
- 示例五 - 命令行模式
- 示例六 - 模拟命令行模式
- 代码自动生成
- 示例一 - 一级控制器
- 示例二 - 多级控制器
- 控制器
- 公共控制器
- traits 多继承 Controller
- 公开不授权控制器
- 其他控制器
- 标签扩展
- 模板
- 网站操作日志
- 节点图
- 行为驱动
- 其他后端方法
- Excel一键导出
- Excel一键导入
- 文件下载
- 邮件发送
- 七牛文件上传
- id加密
- 前端
- ajax请求
- 表单校验
- 丰富弹层
- 异步操作
- 表格溢出
- 随机字符串
- 自动面包屑导航
- 动态加载文件
- 文件上传
- Tab 切换
- 图片预览
- 二维码生成
- 日历组件
- 升级指导
- 更新日志
- FAQ