>[info] tpAdmin v1.2 正式發布,請前往 github 更新
> >[warning] tpadmin已升級為 1.1,之前 1.0 版本廢棄,不再維護,也不再提供文檔,此文檔僅適用于 v1.1 及以上版本
## tpAdmin 是什么?
tpAdmin 是一個基于 ThinkPHP5.0 正式版和 Hui.admin v2.5 的管理后臺,簡化管理后臺的開發流程,簡化代碼的編寫,提高代碼復用率,同時集成完整的權限管理和其他管理后臺中常用的功能
## tpAdmin能做什么?
tpAdmin 是一個通用管理后臺,不涉及任何死板的前端框架,或許它沒有像 easyUI 這樣的框架那么強大,卻給了你非常靈活的開發模式,允許你加入任何你喜歡的插件、前端組件到框架中去,開發前也不需要看大量篇幅的前端文檔。
**因為它非常靈活,所以你可以利用它開發任何 B/S 架構的管理后臺**
## 特性
### 后端
* 模板、控制器、模型、驗證器、數據表自動生成
* RBAC 權限管理
* 完美支持多級控制器及多級控制器權限管理
* 支持前置方法 before
* 支持方法攔截器,實現請求攔截
* 支持過濾器
* 支持模板主題(需自己按照文檔修改官方源碼使用)
* 節點自動掃描與添加
* 七牛上傳及與百度編輯器 (Ueditor) 結合使用
* Excel 一鍵導出和一鍵導入
* 郵件發送( Fsock 和 phpMailer 兩種驅動)
* ID 加密解密
* 網站操作日志記錄(自動水平分表)
* 圖片上傳管理及回調
### 前端
* 表單校驗
* 無限層級菜單,完美與后端多級控制器兼容
* 自動面包屑導航
* 基于 layer 的豐富彈層
* 支持 H5 + iframe 自動切換的無刷新上傳
* ajax 請求處理封裝,直接后臺返回數據控制前端頁面處理
* 多窗口辦公
* 隨機字符串生成
* 表格溢出處理
* 圖片預覽
* 二維碼生成
## 本平臺使用了如下框架或插件、源碼:
* ThinkPHP 5.0.2 正式版
* Hui.admin v2.5
* layer
* jQuery Validform
* 七牛
* ...
> 非常感謝這些框架、插件的支持
## tpadmin官方交流 QQ 群
>[danger] tpadmin官方交流群:518162472
請打廣告的朋友繞道,見一個踢一個,永久拉黑

##注意
tpadmin 使用了大量的 ajax 請求,本人實測過程中經常遇到 php.ini 文件報警告,導致返回的 json 數據出錯,警告如下:
>[warning] Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0
請修改 php.ini 文件里的 always_populate_raw_post_data ,將其值設為 -1 ,一般存在該配置項,直接刪掉前面注釋
PS:不會改谷歌或百度去
**ThinkPHP5.0 正式版有一些不適合管理后臺需求,做了如下修改,請務必修改下面所示,以后升級必須檢查此兩處是否有做修復**
>[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));
}
/****************** 修改結束 ********************/
}
```
>[info]請使用框架使用的源碼,不要自己隨便更新或替換源碼
- 概要
- 開始使用
- 寫在前面
- 目錄結構
- 模板主題支持
- 前置方法before支持
- 數據返回
- 異常接管
- Rbac 權限管理
- 開始使用
- 用戶管理
- 分組管理
- 節點管理
- 角色管理
- 使用流程
- 其他
- 代碼自動生成 v1.2
- 示例一 - 一級控制器
- 示例二 - 多級控制器
- 示例三 - 從數據表生成
- 示例四 - 指定生成的文件
- 示例五 - 命令行模式
- 示例六 - 模擬命令行模式
- 代碼自動生成
- 示例一 - 一級控制器
- 示例二 - 多級控制器
- 控制器
- 公共控制器
- traits 多繼承 Controller
- 公開不授權控制器
- 其他控制器
- 標簽擴展
- 模板
- 網站操作日志
- 節點圖
- 行為驅動
- 其他后端方法
- Excel一鍵導出
- Excel一鍵導入
- 文件下載
- 郵件發送
- 七牛文件上傳
- id加密
- 前端
- ajax請求
- 表單校驗
- 豐富彈層
- 異步操作
- 表格溢出
- 隨機字符串
- 自動面包屑導航
- 動態加載文件
- 文件上傳
- Tab 切換
- 圖片預覽
- 二維碼生成
- 日歷組件
- 升級指導
- 更新日志
- FAQ