## 目錄結構
應用是ThinkCMF中最大的獨立模塊,一個應用會包含自己的數據庫表,控制器,模型和視圖.它的核心代碼位于 `app`目錄下,以` portal` 應用為例([請到演示倉庫下載](https://github.com/thinkcmf/demos))
```
thinkcmf 根目錄
├─api api目錄
├─app 應用目錄
│ ├─portal 門戶應用目錄
│ │ ├─controller 控制器目錄
│ │ ├─model 模型目錄
│ │ └─ ... 更多類庫目錄
│ ├─ ... 更多應用
```
同時一個應用也會有自己的視圖,但在 ThinkCMF 中一個應用會分為前臺視圖層和后臺視圖層;
```
thinkcmf 根目錄
├─public WEB 部署目錄(對外訪問目錄)
│ ├─themes 前后臺主題目錄
│ │ ├─admin_simpleboot3 后臺默認主題(以admin 開頭)
│ │ │ └─portal 應用視圖目錄
│ │ │ │ ├─admin_article 后臺文章管理控制器視圖目錄
│ │ │ │ ├─admin_category 后臺文章分類管理控制器視圖目錄
│ │ │ │ └─admin_page 后臺頁面管理控制器視圖目錄
│ │ └─simpleboot3 前臺主題
│ │ │ └─portal 應用視圖目錄
│ │ │ │ ├─index.html 應用前臺首頁
│ │ │ │ └─ ... 其它前臺文件
```
> 注:應用后臺主題目錄以 admin開頭
以上就是 cmf 應用的結構體系,有人會覺得不爽,估計會有以下幾點:
1.為什么和 tp5.1默認的項目結構不一樣,tp5.1不是把應用放 application 目錄下?
> 老貓說:
tp5.1足夠靈活,應用目錄是可以輕松配置的,之前的 thinkcmfx 也是放 application 目錄,但老貓覺得這次優化就要想的更細點,現在既然都以 namespace 為主了,如果還把應用放 application 目錄,命名空間又是`app\portal`這樣的,為什么不直接把application 目錄名也改為`app`呢!
2.為什么非要把后臺控制器帶上前綴`Admin`呢?
> 老貓說:
如果你能分清是前臺后臺控制器,你不想帶也沒事,加個前綴項目結構變的清楚不好嗎?
3.為什么非要把前臺和后臺模板分開呢?
> 老貓說:
沒辦法就這么任性!
a.其實分開是有更多好處的,前臺后臺本來就是風格不統一的,把什么放在一起反而會讓人煩,最后你都沒法分清是前臺后臺的 css了,還不如徹底分開.
b.分開以后前后臺實現多模板的功能就方便了,多模板在很多場景是很有用的,兩年了網站要大改,老板說別用 bootstrap 了,我們換個徹底吧,你只要新建一個目錄,自己寫好放上去就好了
c.前臺多模板了,對于一些前臺好的,他完全可以把自己的模板做好打包銷售出去,后臺多模板也一樣呀!
## 數據庫表結構
應用數據表命名時,我們希望你最好加個表前綴,如 `portal_`這樣會讓你的數據庫表結構也很清晰,
```
cmf_portal_category (portal應用 文章分類表)
cmf_portal_category_post (portal應用 分類文章對應表)
cmf_portal_post (portal應用 文章表)
cmf_portal_tag (portal應用 文章標簽表)
cmf_portal_tag_post (portal應用 標簽文章對應表)
```
## 應用化才是你發展的重點
應用化是你把業務分開的一個不錯的方式,基于 cmf 提供的基礎功能,你不用再關心權限,用戶等最基礎的東西,只要根據自己的應用場景增加應用就可以了,比如:論壇,商城,話題...,甚至你可以在自己的行業里做應用.
如果你的應用有足夠大的通用性你完全可以把它做成一個產品,對于已經使用過 cmf 的用戶,只要把你的應用復制安裝過來,就能用了!
所以應用化,你可以最方便的享受 cmf 的更新,同時也可以以應用形式發布自己的產品,即時是你內部自己用,項目維護發展也足夠清晰!
> 小夏說:
>別再改 cmf 的核心代碼了,不好升級,改了,再也不會有老貓這個免費,還天天做客服的高級搬磚工了!
管好你自己的應用就好了!
- 序言
- 基礎
- 安裝ThinkCMF
- 為了更爽
- 目錄結構
- 入口文件
- 第三方庫
- 開發規范
- 數據庫規范
- 調試模式
- URL訪問
- 應用
- 配置
- 路由
- 控制器
- 控制器定義
- 控制器模板賦值
- 控制器模板渲染
- 前臺控制器
- 前臺用戶控制器
- 后臺控制器
- 跳轉,AJAX返回和重定向
- URL生成
- 請求
- 請求信息
- 輸入變量
- 請求類型
- 獲取請求頭信息
- 偽靜態
- 更多
- 系統函數
- cmf_auth_check 用戶權限檢查
- cmf_captcha_check圖片驗證碼驗證
- cmf_check_mobile 檢查手機號
- cmf_check_user_action 用戶訪問控制
- cmf_check_verification_code 數字驗證碼檢查
- cmf_clear_cache清空系統緩存
- cmf_clear_verification_code 清除數字驗證碼
- cmf_compare_password 用戶密碼比較
- cmf_current_lang 判斷當前語言包
- cmf_generate_user_token生成用戶token
- cmf_get_admin_style 獲取后臺風格
- cmf_get_content_images 獲取HTML圖片
- cmf_get_current_admin_id 登錄管理員ID
- cmf_get_current_admin_theme獲取當前后臺模板
- cmf_get_current_theme獲取前臺當前模板
- cmf_get_current_user 獲取登錄用戶信息
- cmf_get_current_user_id 登錄用戶ID
- cmf_get_domain返回帶協議的域名
- cmf_get_file_download_url 獲取文件下載鏈接
- cmf_get_file_extension 獲取文件擴展名
- cmf_get_image_url 獲取圖片 URL
- cmf_get_option 獲取系統配置
- cmf_get_plugin_class 獲取插件類名
- cmf_get_plugin_config獲取插件配置
- cmf_get_root 網站根目錄
- cmf_get_site_info 獲取網站信息
- cmf_get_theme_path獲取前臺模板根目錄
- cmf_get_upload_setting獲取上傳配置
- cmf_get_user_avatar_url 獲取用戶頭像URL
- cmf_get_verification_code 生成數字驗證碼
- cmf_is_android 判斷是否為安卓手機
- cmf_is_ios 判斷是否為ios訪問
- cmf_is_ipad 判斷是否為ipad訪問
- cmf_is_iphone 判斷是否為iphone訪問
- cmf_is_mobile 判斷是否為手機
- cmf_is_user_login 判斷用戶是否登錄
- cmf_is_wechat 判斷是否為微信
- cmf_password 密碼加密
- cmf_plugin_url 插件URL生成
- cmf_random_string隨機字符串生成
- cmf_replace_content_file_url 替換編輯器文件地址
- cmf_scan_dir 替代scan_dir的方法
- cmf_send_email 發送郵件
- cmf_set_dynamic_config 設置動態配置
- cmf_set_option 設置系統配置
- cmf_split_sql 切分SQL文件
- cmf_update_current_user 更新當前用戶信息
- cmf_url_encode 生成base64的url
- cmf_verification_code_log 驗證碼發送日志
- cmf_version獲取版本號
- get_client_ip 獲取客戶端IP地址
- hook 添加鉤子
- 數據庫
- 數據庫配置
- 添加數據
- 更新數據
- 查詢數據
- 刪除數據
- 事務操作
- 更多數據庫操作
- 模型
- 模型定義
- 添加數據
- 更新數據
- 查詢數據
- 刪除數據
- 應用
- 應用的概念
- 應用開發流程
- 導航共享
- 幾個重要基類
- 后臺菜單注解
- 用戶操作配置
- URL 規則配置
- 應用第三方庫
- API
- 規范
- 狀態碼說明
- 版本號
- 資源控制器模板
- 成功返回
- 錯誤返回
- API路由
- API基類控制器
- API應用開發流程
- API第三方庫
- 模板
- 模板常量
- 模板標簽
- 變量輸出
- 系統變量
- 請求參數
- 使用函數
- 使用默認值
- 使用運算符
- 三元運算
- 原樣輸出
- 模板注釋
- 模板目錄
- 包含文件
- 模板布局
- 模板繼承
- 網站信息
- 內置標簽
- 循環輸出標簽
- 比較標簽
- 條件判斷
- 標簽嵌套
- 原生PHP
- 定義標簽
- CMF標簽
- 導航標簽
- 子導航標簽
- 驗證碼標簽
- 幻燈片標簽
- 鉤子標簽
- 友情鏈接標簽
- 分頁標簽
- 傻瓜式模板
- 什么是傻瓜式模板
- 模板描述文件
- 模板文件配置
- 模板變量類型
- 模板變量數據源
- 導航模板數據源
- 導航菜單模板數據源
- 幻燈片模板數據源
- 模板切換
- 插件
- 插件鉤子
- 核心鉤子
- 前臺模板鉤子
- 后臺鉤子
- send_mobile_verification_code
- comment
- guestbook
- admin_dashboard
- switch_theme
- admin_login
- admin_init
- home_init
- 插件類主文件
- 插件開發流程
- 插件配置
- 插件控制器
- 插件后臺管理控制器
- 插件后臺菜單
- 插件視圖
- 插件數據庫模型
- 插件多語言
- 插件API控制器
- 插件第三方庫
- 插件URL生成
- 前端
- Wind.js
- 前端組件
- js-ajax-form
- js-ajax-delete
- js-ajax-dialog-btn
- js-count-btn
- js-date
- js-datetime
- js-bootstrap-date
- js-bootstrap-datetime
- 專題
- 緩存
- Session
- Cookie
- 分頁
- 驗證碼
- 文件上傳
- 第三方擴展
- Swoole
- 附錄
- 升級日志
- 升級指導