歡迎您光臨本站 註冊首頁

ThinkAdmin v5.0 發布,基於ThinkPHP5.1後台開發框架

←手機掃碼閱讀     admin @ 2019-08-06 , reply:0

大道至簡 · 原生框架

ThinkAdmin v5 是一個基於 ThinkPHP 5.1 和 ThinkLibrary 開發的後台管理系統。
我們致力於二次開發底層框架,提供完整的組件及API,基於此框架可以快速開發應用,另外項目安裝及二次開發可以參考 ThinkPHP 官方文檔,資料庫文件擺放在項目根目錄下。
ThinkAdmin 非常適用快速二次開發,默認集成 微信開發組件,支持微信服務號,微信支付,支付寶支付,阿里雲OSS存儲,七牛雲存儲,本地伺服器存儲。

注意事項 :

  • 項目測試需要自行搭建環境導入資料庫( admin_v5.sql )並修改配置( config/database.php );

  • 若操作提示「測試系統禁止操作」等字樣,需要刪除演示路由配置( route/demo.php )或清空路由文件;

  • 當前版本使用 ThinkPHP 5.1.x,對 PHP 版本標註不低於 PHP 5.6,具體請閱讀 ThinkPHP 官方文檔;

  • 環境需開啟 PATHINFO,不再支持 ThinkPHP 的 URL 兼容模式運行(源於如何優雅的展示);

 

登錄頁面

 

後台首頁

 

技術支持

開發文檔:http://doc.thinkadmin.top/thinkadmin-v5
開發前請認真閱讀 ThinkPHP 官方文檔會對您有幫助哦!
本地開發命令php think run,使用http://127.0.0.1:8000訪問項目。
PHP 開發技術交流( QQ 群 513350915)
PHP微信開發群 (SDK)

代碼倉庫

ThinkAdmin 為 MIT 協議開源項目,安裝使用或二次開發不受約束,歡迎 fork 項目。
部分代碼及功能組件來自互聯網,若有異議可以聯繫作者進行刪除。

框架指令

  • 執行 build.cmd 可更新 Composer 插件,會刪除並替換 vendor 目錄

  • 執行 php think run 啟用本地開發環境,訪問 http://127.0.0.1:8000

1. 線上代碼更新

  • 執行 php think xsync:admin 從線上服務更新 admin 模塊的所有文件(注意文件安全)

  • 執行 php think xsync:wechat 從線上服務更新 wechat 模塊的所有文件(注意文件安全)

  • 執行 php think xsync:plugs 從線上服務更新 plugs 靜態插件的部分文件(注意文件安全)

  • 執行 php think xsync:service 從線上服務更新 service 模塊的所有文件(注意文件安全)

  • 執行 php think xsync:config 從線上服務更新 config 項目配置的部分文件(注意文件安全)

2. 微信資料管理

  • 執行 php think xfans:all 更新已經對接的公眾號全部列表

  • 執行 php think xfans:list 更新已經對接的公眾號粉絲列表

  • 執行 php think xfans:tags 更新已經對接的公眾號標籤列表

  • 執行 php think xfans:black 更新已經對接的公眾號黑名單列表

3. 守護進程管理

  • 執行 php think xtask:reset 重啟消息任務守護進程

  • 執行 php think xtask:start 啟動消息任務守護進程

  • 執行 php think xtask:state 查詢消息任務守護進程

  • 執行 php think xtask:stop 暫停消息任務守護進程

4. 其它自定工具

  • 執行 php think xclean:session 清理無效的會話SESSION文件

  • 執行 php think xclean:store 清理無效的訂單信息及定時任務

 

ThinkAdmin 後台許可權管理

ThinkAdmin 的許可權管理基於標準RBAC簡化而來,去除了繁雜的節點管理,使得許可權管理起來更簡單,具體包含節點管理、許可權管理、菜單管理、用戶管理。

 

一、節點管理(系統自動維護)

自 ThinkAdmin v5 版本開始,系統節點使用代碼註釋實現;
需要加入許可權控制的訪問方法,需要寫上標準的塊註釋。如:

/**
* 操作的名稱
* @auth true  # 表示需要驗證許可權
* @menu true  # 在菜單編輯的節點可選項
*/
public function index(){
   // @todo
}
  • 此版本的許可權使用註解實現

  • 註釋必需使用標準的塊註釋,如下案例

  • 其中@auth true表示訪問需要許可權驗證

  • 其中@menu true顯示在菜單編輯的節點可選項

二、許可權管理(相當於角色管理)

創建好許可權后,需要給許可權配置好需要控制的節點的列表。
如:許可權A只能訪問哪些節點,就需要勾選對應功能的節點。

三、菜單管理(最多支持三級)

菜單創建與編輯里,要特別注意菜單對應的節點規範。
如:admin/menu/index
如果在節點註釋中含menu true則該節點會出現在自動提示中。

四、用戶管理(設置密碼及許可權)

添加用戶后,需要給用戶配置對應許可權。
注意admin為超級用戶,不需要配置許可權,因為他擁有後台所有許可權。

五、數據列表輸出

ThinkLibrary 與 ThinkPHP 組合起來就是現在的 ThinkAdmin v5,都是基於 Composer 來管理;
如果需要使用到 ThinkLibrary 裡面的功能,控制器需要繼承 \library\Controller 類。

數據列表操作

在控制器訪問中只需加入$this->page(表名)可以顯示默認數據表的分頁列表;
如果需要對列表進行條件處理,可以使用查詢器來實現。如:

// 創建查詢器
$query = $this->_query('表名')->where(['status'=>'1']);

// 查詢器分頁輸出
$query->page();

注意:在 ThinkPHP 5.1 之後,控制器不需要直接返回內容了,函數_page裡面使用HttpResponseException直接輸出機制。
另外對於url輸入的變數也可以快速輸入到查詢器條件中,如:

// 創建查詢器
$query = $this->_query('表名');

// 切入url參數,接收 username 和 sex 並使用 like 查詢,接收 status 使用 eq 查詢
$query->like('username,sex')->equal('status');

// 查詢器分頁輸出
$query->page();

有時候,url輸入的名稱與數據欄位不一定是匹配的,所以需要用到別名,這裡就需要按規則寫條件,如:

// 切入url參數,接收 username_alias 和 sex 並使用 like 查詢,接收 user_status 使用 eq 查詢

// 這裡用到了別名,username_alias 對應資料庫中的 username 欄位,user_status 對應資料庫的 status 欄位

$query = $this->_query('表名')->like('username#username_alias,sex')->equal('status#user_status');

// 查詢器分頁輸出
$query->page();

輸出額外數據到模板,與 ThinkPHP 操作無異,如:

// 額外列表數據賦值到模板,模板里直接使用變數 $userList
$this->userList = Db::name('User')->where(['status'=>'1'])->select();

// 切入url參數,接收 username 和 sex 並使用 like 查詢,接收 status 使用 eq 查詢
$query = $this->_query('表名')->like('username,sex')->equal('status');

// 查詢器分頁輸出
$query->page();

數據回調處理

對於通過page方法實現的即將顯示到模板的列表,還可以進行引用二次處理,如:

protected function _page_filter(&$data){
    // 這裡可以對 $data 進行二次處理,注意是引用
}

### 當一個控制器存在多個page操作時,可以指定回調前綴
protected function _index_page_filter(&$data){
  //  精準回調對 $data 進行二次處理,注意是引用
}

下面提供一個完整的DEMO

/**
 * 系統操作日誌
 * @auth true
 * @menu true
 * @throws \think\Exception
 * @throws \think\db\exception\DataNotFoundException
 * @throws \think\db\exception\ModelNotFoundException
 * @throws \think\exception\DbException
 */
public function index()
{
    $this->title = '系統操作日誌';
    $query = $this->_query($this->table)->like('action,node,content,username,geoip');
    $query->dateBetween('create_at')->order('id desc')->page();
}

/**
 * 列表數據處理
 * @param array $data
 * @throws \Exception
 */
protected function _index_page_filter(&$data)
{
    $ip = new \Ip2Region();
    foreach ($data as &$vo) {
        $result = $ip->btreeSearch($vo['geoip']);
        $vo['isp'] = isset($result['region']) ? $result['region'] : '';
        $vo['isp'] = str_replace(['內網IP', '0', '|'], '', $vo['isp']);
    }
}

 

六、表單自動操作

ThinkLibrary 表單處理可能簡化數據保存與更新操作,
控制器只需要一行代碼,就可以實現數據添加與更新,如:

$this->_form('表名','模板名稱');

當然,這裡使用了HttpResponseException直接輸出,不需要返回內容的。
需要給模板額外賦值,可以直接在控制器$this->username='你的值';
這樣在模板中可以直接使用$username變數;

如果提交的表單數據包含指定主鍵時則為更新操作,否則為添加記錄;
另外對錶單還有callback操作(參數使用引用),統一名稱為protected function _form_filter(&$data)

另外關於模板的使用,可以參考下demo哦。


數據回調處理

對於表單操作,Controller內置了兩個回調方法,如:

[_ACTION]_form_filter($vo)
[_ACTION]_form_result($result, $vo)

當回調函數返回false時,Controller默認的行為將不會執行。


數據回調處理DEMO

/**
 * 添加拼團
 * @auth true
 */
public function add()
{
    $this->title = '添加拼團';
    $this->_form($this->table, 'form');
}

/**
 * 編輯拼團
 * @auth true
 */
public function edit()
{
    $this->title = '編輯拼團';
    $this->_form($this->table, 'form');
}

/**
 * 添加拼團商品表單處理
 * @param array $data
 * @throws \think\db\exception\DataNotFoundException
 * @throws \think\db\exception\ModelNotFoundException
 * @throws \think\exception\DbException
 */
protected function _form_filter(&$data)
{
    if (empty($data['code'])) $data['code'] = Data::uniqidNumberCode(10);
    if ($this->request->isGet()) {
        $map = ['package_code' => $data['code']];
        $data['list'] = Db::name('StoreGoodsGroupList')->where($map)->select();
    } else {
        if (empty($data['logo'])) $this->error('請上傳商品圖標圖片');
        if (empty($data['image'])) $this->error('請上傳商品展示圖片');
        if (empty($data['item_number'])) $this->error('請添加套卡包含內容');
        $all = [];
        foreach (array_keys($data['item_number']) as $key) $all[] = [
            'package_code' => $data['code'],
            'goods_code'   => $data['item_code'][$key],
            'goods_type'   => $data['item_type'][$key],
            'goods_title'  => $data['item_title'][$key],
            'goods_number' => $data['item_number'][$key],
        ];
        try {
            Db::transaction(function () use ($data, $all) {
                $map = ['package_code' => $data['code']];
                Db::name('StoreGoodsGroupList')->where($map)->delete();
                Db::name('StoreGoodsGroupList')->insertAll($all);
            });
        } catch (Exception $e) {
            $this->error("商品詳情處理失敗,{$e->getMessage()}");
        }
    }
}

/**
 * 表單結果處理
 * @param boolean $result
 */
protected function _form_result($result)
{
    if ($result && $this->request->isPost()) {
        $this->success('商品編輯成功!', 'javascript:history.back()');
    }
}

如果是在 ThinkAdmin 後台基於 admin.js 的情況下,可使用 form[data-auto] 來與 $this->_form 配合使用。

 

七、數據刪除自動處理

數據刪除同樣也只需要一行代碼$this->_delete('表名');
前端只需要傳入數據表的主鍵就可以了,不需要做額外處理。

1. 硬刪除

如果數據表中不存在is_deleted欄位,則為硬刪除。

2. 軟刪除

當前數據表中存在is_deleted欄位時,$this->_delete則自動為軟刪除操作,
在列表操作時加上條件過濾下就可以正常操作。

數據回調處理

對於數據刪除的結果,可以進行自定義處理,回調函數規則如:[_ACTION]_delete_result
下面提供一個完整的demo:

/**
 * 刪除系統許可權
 * @auth true
 */
public function remove()
{
    $this->applyCsrfToken();
    $this->_delete($this->table);
}

/**
 * 刪除結果處理
 * @param boolean $result
 * @throws \think\Exception
 * @throws \think\exception\PDOException
 */
protected function _remove_delete_result($result)
{
    if ($result) {
        $where = ['auth' => $this->request->post('id')];
        Db::name('SystemAuthNode')->where($where)->delete();
        $this->success("許可權刪除成功!", '');
    } else {
        $this->error("許可權刪除失敗,請稍候再試!");
    }
}

如果是在 ThinkAdmin 後台基於 admin.js 的情況下,可台使用 data-action 來與 $this->_delete 配合使用。
前端提交上來的主鍵值支持多個,以英文逗號分隔。

 

八、數據更新操作

數據更新主要用於 數據狀態更新,比如:數據禁用,數據啟用,狀態更改

在服務端只需要一行代碼$this->_save($this->table)就可以實現更新操作。

前端需要提供需要修改的數據ID以及數據狀態值,當然也可以後第二個參數指定(強烈建議配置第二個欄位)

這個地方可能存在數據惡意修改的情況,所有指定第二個參數非常有必要。

下面提供一個完整的demo,數據禁用與啟用操作:

/**
 * 啟用系統菜單
 * @auth true
 * @throws \think\Exception
 * @throws \think\exception\PDOException
 */
public function resume()
{
    $this->applyCsrfToken();
    $this->_save($this->table, ['status' => '1']);
}

/**
 * 禁用系統菜單
 * @auth true
 * @throws \think\Exception
 * @throws \think\exception\PDOException
 */
public function forbid()
{
    $this->applyCsrfToken();
    $this->_save($this->table, ['status' => '0']);
}

如果是在 ThinkAdmin 後台基於 admin.js 的情況下,可台使用 data-action 來與 $this->_save 配合使用。
前端提交上來的主鍵值支持多個,以英文逗號分隔。

 

九、項目歷史版本

體驗賬號及密碼都是admin

ThinkAdmin v1 基於 ThinkPHP 5.0 開發

ThinkAdmin v2 基於 ThinkPHP 5.0 開發

ThinkAdmin v3 基於 ThinkPHP 5.1 開發

ThinkAdmin v4 基於 ThinkPHP 5.1 開發

ThinkAdmin v5 基於 ThinkPHP 5.1 開發(後台許可權基於註解實現)


[admin ]

來源:OsChina
連結:https://www.oschina.net/news/108836/thinkadmin-5-0-released
ThinkAdmin v5.0 發布,基於ThinkPHP5.1後台開發框架已經有165次圍觀

http://coctec.com/news/soft/show-post-211754.html