## 常量參考
### 預定義常量
預定義常量是指系統內置定義好的常量,不會隨著環境的變化而變化,包括:
~~~
URL_COMMON 普通模式 URL (0)
URL_PATHINFO PATHINFO URL (1)
URL_REWRITE REWRITE URL (2)
URL_COMPAT 兼容模式 URL (3)
EXT 類庫文件后綴(.class.php)
THINK_VERSION 框架版本號
~~~
### 路徑常量
系統和應用的路徑常量用于系統默認的目錄規范,可以通過重新定義改變,如果不希望定制目錄,這些常量一般不需要更改。
~~~
THINK_PATH 框架系統目錄
APP_PATH 應用目錄(默認為入口文件所在目錄)
LIB_PATH 系統類庫目錄(默認為 THINK_PATH.'Library/')
CORE_PATH 系統核心類庫目錄 (默認為 LIB_PATH.'Think/')
MODE_PATH 系統應用模式目錄 (默認為 THINK_PATH.'Mode/')
BEHAVIOR_PATH 行為目錄 (默認為 LIB_PATH.'Behavior/')
COMMON_PATH 公共模塊目錄 (默認為 APP_PATH.'Common/')
VENDOR_PATH 第三方類庫目錄(默認為 LIB_PATH.'Vendor/')
RUNTIME_PATH 應用運行時目錄(默認為 APP_PATH.'Runtime/')
HTML_PATH 應用靜態緩存目錄(默認為 APP_PATH.'Html/')
CONF_PATH 應用公共配置目錄(默認為 COMMON_PATH.'Conf/')
LANG_PATH 公共語言包目錄 (默認為 COMMON_PATH.'Lang/')
LOG_PATH 應用日志目錄 (默認為 RUNTIME_PATH.'Logs/')
CACHE_PATH 項目模板緩存目錄(默認為 RUNTIME_PATH.'Cache/')
TEMP_PATH 應用緩存目錄(默認為 RUNTIME_PATH.'Temp/')
DATA_PATH 應用數據目錄 (默認為 RUNTIME_PATH.'Data/')
ADDON_PATH 插件控制器目錄 (默認為 APP_PATH.'Addon') 3.2.3新增
~~~
### 系統常量
系統常量會隨著開發環境的改變或者設置的改變而產生變化。
~~~
IS_CGI 是否屬于 CGI模式
IS_WIN 是否屬于Windows 環境
IS_CLI 是否屬于命令行模式
__ROOT__ 網站根目錄地址
__APP__ 當前應用(入口文件)地址
__MODULE__ 當前模塊的URL地址
__CONTROLLER__ 當前控制器的URL地址
__ACTION__ 當前操作的URL地址
__SELF__ 當前URL地址
__INFO__ 當前的PATH_INFO字符串
__EXT__ 當前URL地址的擴展名
MODULE_NAME 當前模塊名
MODULE_PATH 當前模塊路徑
CONTROLLER_NAME 當前控制器名
CONTROLLER_PATH 當前控制器路徑 3.2.3新增
ACTION_NAME 當前操作名
APP_DEBUG 是否開啟調試模式
APP_MODE 當前應用模式名稱
APP_STATUS 當前應用狀態
STORAGE_TYPE 當前存儲類型
MODULE_PATHINFO_DEPR 模塊的PATHINFO分割符
MEMORY_LIMIT_ON 系統內存統計支持
RUNTIME_FILE 項目編譯緩存文件名
THEME_NAME 當前主題名稱
THEME_PATH 當前模板主題路徑
LANG_SET 當前瀏覽器語言
MAGIC_QUOTES_GPC MAGIC_QUOTES_GPC
NOW_TIME 當前請求時間(時間戳)
REQUEST_METHOD 當前請求類型
IS_GET 當前是否GET請求
IS_POST 當前是否POST請求
IS_PUT 當前是否PUT請求
IS_DELETE 當前是否DELETE請求
IS_AJAX 當前是否AJAX請求
BIND_MODULE 當前綁定的模塊(3.2.1新增)
BIND_CONTROLLER 當前綁定的控制器(3.2.1新增)
BIND_ACTION 當前綁定的操作(3.2.1新增)
CONF_EXT 配置文件后綴(3.2.2新增)
CONF_PARSE 配置文件解析方法(3.2.2新增)
TMPL_PATH 用于改變全局視圖目錄(3.2.3新增)
~~~
## 配置參考
### 慣例配置
#### 應用設定
~~~
'APP_USE_NAMESPACE' => true, // 應用類庫是否使用命名空間 3.2.1新增
'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'), // 禁止訪問的模塊列表
'MODULE_ALLOW_LIST' => array(), // 允許訪問的模塊列表
'CONTROLLER_LEVEL' => 1,
'APP_AUTOLOAD_LAYER' => 'Controller,Model', // 自動加載的應用類庫層(針對非命名空間定義類庫) 3.2.1新增
'APP_AUTOLOAD_PATH' => '', // 自動加載的路徑(針對非命名空間定義類庫) 3.2.1新增
~~~
#### 默認設定
~~~
'DEFAULT_M_LAYER' => 'Model', // 默認的模型層名稱
'DEFAULT_C_LAYER' => 'Controller', // 默認的控制器層名稱
'DEFAULT_V_LAYER' => 'View', // 默認的視圖層名稱
'DEFAULT_LANG' => 'zh-cn', // 默認語言
'DEFAULT_THEME' => '', // 默認模板主題名稱
'DEFAULT_MODULE' => 'Home', // 默認模塊
'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函數...
~~~
### Cookie設置
~~~
'COOKIE_EXPIRE' => 0, // Cookie有效期
'COOKIE_DOMAIN' => '', // Cookie有效域名
'COOKIE_PATH' => '/', // Cookie路徑
'COOKIE_PREFIX' => '', // Cookie前綴 避免沖突
'COOKIE_HTTPONLY' => '', // Cookie的httponly屬性 3.2.2新增
~~~
#### 數據庫設置
~~~
'DB_TYPE' => '', // 數據庫類型
'DB_HOST' => '', // 服務器地址
'DB_NAME' => '', // 數據庫名
'DB_USER' => '', // 用戶名
'DB_PWD' => '', // 密碼
'DB_PORT' => '', // 端口
'DB_PREFIX' => '', // 數據庫表前綴
'DB_FIELDTYPE_CHECK' => false, // 是否進行字段類型檢查 3.2.3版本廢棄
'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創建緩存 3.2.3版本廢棄
'DB_SQL_BUILD_QUEUE' => 'file', // SQL緩存隊列的緩存方式 支持 file xcache和apc 3.2.3版本廢棄
'DB_SQL_BUILD_LENGTH' => 20, // SQL緩存的隊列長度 3.2.3版本廢棄
'DB_SQL_LOG' => false, // SQL執行日志記錄 3.2.3版本廢棄
'DB_BIND_PARAM' => false, // 數據庫寫入數據自動參數綁定
'DB_DEBUG' => false, // 數據庫調試模式 3.2.3新增
'DB_LITE' => false, // 數據庫Lite模式 3.2.3新增
~~~
#### 數據緩存設置
~~~
'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_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 前綴
~~~
#### 模板引擎設置
~~~
'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
~~~
#### 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_404_REDIRECT' => '', // 404 跳轉頁面 部署模式有效
'URL_ROUTER_ON' => false, // 是否開啟URL路由
'URL_ROUTE_RULES' => array(), // 默認路由規則 針對模塊
'URL_MAP_RULES' => array(), // URL映射定義規則
~~~
#### 系統變量名稱設置
~~~
'VAR_MODULE' => 'm', // 默認模塊獲取變量
'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', // 默認模板切換變量
'VAR_ADDON' => 'addon', // 默認的插件控制器命名空間變量 3.2.2新增
~~~
#### 其他設置
~~~
'HTTP_CACHE_CONTROL' => 'private', // 網頁緩存控制
'CHECK_APP_DIR' => true, // 是否檢查應用目錄是否創建
'FILE_UPLOAD_TYPE' => 'Local', // 文件上傳方式
'DATA_CRYPT_TYPE' => 'Think', // 數據加密方式
~~~
## 常見資源
qq sdk 調試[http://connect.qq.com/sdk/webtools/index.html](http://connect.qq.com/sdk/webtools/index.html)
linux tree 命令 [http://mama.indstate.edu/users/ice/tree/](http://mama.indstate.edu/users/ice/tree/)
composer入門指南中文版 [http://docs.phpcomposer.com/00-intro.md](http://docs.phpcomposer.com/00-intro.md)
## 常見問題
### 如何獲取ThinkPHP
[官網下載頻道](http://www.thinkphp.cn/down.html)

有所有版本。
### ThinkPHP的自動生成
#### 目錄安全文件
在自動生成目錄結構的同時,在各個目錄下面我們還看到了index.html文件,這是ThinkPHP自動生成的目錄安全文件。
為了避免某些服務器開啟了目錄瀏覽權限后可以直接在瀏覽器輸入URL地址查看目錄,系統默認開啟了目錄安全文件機制,會在自動生成目錄的時候生成空白的`index.html`文件,當然安全文件的名稱可以設置,例如你想給安全文件定義為`default.html`可以在入口文件中添加:
~~~
define('DIR_SECURE_FILENAME', 'default.html');
define('APP_PATH','./Application/');
require './ThinkPHP/ThinkPHP.php';
~~~
如果你的環境足夠安全,不希望生成目錄安全文件,可以在入口文件里面關閉目錄安全文件的生成,例如:
~~~
define('BUILD_DIR_SECURE', false);
~~~
#### 自動生成模塊目錄
可以支持自動生成默認模塊之外的模塊目錄以及批量生成控制器和模型類。
例如,如果我們需要生成一個Admin模塊用于后臺應用,在應用入口文件中定義如下:
~~~
// 綁定Admin模塊到當前入口文件
define('BIND_MODULE','Admin');
define('APP_PATH','./Application/');
require './ThinkPHP/ThinkPHP.php';
~~~
然后訪問URL地址
~~~
http://serverName/index.php
~~~
就會生成Admin模塊的目錄,并生成一個默認的控制器類`Admin\Controller\IndexController`。 如果需要生成更多的控制器類,可以定義`BUILD_CONTROLLER_LIST`常量,例如:
~~~
// 綁定Admin模塊到當前入口文件
define('BIND_MODULE','Admin');
define('BUILD_CONTROLLER_LIST','Index,User,Menu');
define('APP_PATH','./Application/');
require './ThinkPHP/ThinkPHP.php';
~~~
訪問后會自動生成三個指定的控制器類:
~~~
Admin\Controller\IndexController
Admin\Controller\UserController
Admin\Controller\MenuController
~~~
> 注意:默認生成的控制器類都是繼承`Think\Controller`,如果需要繼承其他的公共類需要另外調整。 如果在應用的公共配置文件中設置關閉了 `APP_USE_NAMESPACE`的話,生成的控制器類則不會采用命名空間定義。
同樣,也可以定義`BUILD_MODEL_LIST`支持生成多個模型類:
~~~
// 綁定Admin模塊到當前入口文件
define('BIND_MODULE','Admin');
define('BUILD_MODEL_LIST','User,Menu');
define('APP_PATH','./Application/');
require './ThinkPHP/ThinkPHP.php';
~~~
訪問會自動生成模型類:
~~~
Admin\Model\UserModel
Admin\Model\MenuModel
~~~
> 注意:默認生成的模型類都是繼承`Think\Model`,如果需要繼承公共的模型類需要另外調整。 如果在應用的公共配置文件中設置關閉了 `APP_USE_NAMESPACE`的話,生成的模型類則不會采用命名空間定義。
還可以自己手動調用`Think\Build`類的方法來生成控制器類和模型類,例如:
~~~
// 生成Admin模塊的Role控制器類
// 默認類庫為Admin\Controller\RoleController
// 如果已經存在則不會重新生成
\Think\Build::buildController('Admin','Role');
// 生成Admin模塊的Role模型類
// 默認類庫為Admin\Model\RoleModel
// 如果已經存在則不會重新生成
\Think\Build::buildModel('Admin','Role');
~~~
更多的方法可以參考Think\Build類庫。
### 單模塊省略模塊名
`define('BIND_MODULE','Home');`
### 命名空間
詳情參考[php手冊](http://php.net/language.namespaces)
### Coding 上如何部署一個 ThinkPHP演示應用
#### 提交代碼
#### 演示中新建 mysql和filesystem 服務
#### 配置文件中獲取`$_ENV['VCAP_SERVICES']`環境變量
#### 用composer文件開啟php擴展
參見 [http://docs.coding.io/languages/php](http://docs.coding.io/languages/php)
#### 恢復數據導coding上


#### 創建webhook
coding 為用戶提供了 webhook 功能,方便用戶在 push 代碼改動后自動 POST 請求你指定的 Web URL,你可以利用這個 URL 在程序后臺完成程序的自動部署等操作。更多的介紹跟使用方法請參考 [”WebHook 的內容是什么?"](https://coding.net/help/about_git/about_web_hook_content) 以及 ["WebHook 是什么?我該如何使用?"](https://coding.net/help/about_git/what_is_web_hook)。
[Coding 云端演示平臺靜態網站部署指南](http://static-site.coding.io/)
## 隨書演示地址:
<http://yang-book.coding.io>
大家可以隨時push request 補充,如果需要數據庫表支持請添加自己的添加自己的表前綴,放到attach里,update20150823.sql這種。
## 如何正確的做事xmind
<http://pan.baidu.com/s/1o6Khi7C>
- 序
- 前言
- 內容簡介
- 目錄
- 基礎知識
- 起步
- 控制器
- 模型
- 模板
- 命名空間
- 進階知識
- 路由
- 配置
- 緩存
- 權限
- 擴展
- 國際化
- 安全
- 單元測試
- 拿來主義
- 調試方法
- 調試的步驟
- 調試工具
- 顯示trace信息
- 開啟調試和關閉調試的區別
- netbeans+xdebug
- Socketlog
- PHP常見錯誤
- 小黃鴨調試法,每個程序員都要知道的
- 應用場景
- 第三方登錄
- 圖片處理
- 博客
- SAE
- REST實踐
- Cli
- ajax分頁
- barcode條形碼
- excel
- 發郵件
- 漢字轉全拼和首字母,支持帶聲調
- 中文分詞
- 瀏覽器useragent解析
- freelog項目實戰
- 需求分析
- 數據庫設計
- 編碼實踐
- 前端實現
- rest接口
- 文章發布
- 文件上傳
- 視頻播放
- 音樂播放
- 圖片幻燈片展示
- 注冊和登錄
- 個人資料更新
- 第三方登錄的使用
- 后臺
- 微信的開發
- 首頁及個人主頁
- 列表
- 歸檔
- 搜索
- 分頁
- 總結經驗
- 自我提升
- 進行小項目的鍛煉
- 對現有輪子的重構和移植
- 寫技術博客
- 制作視頻教程
- 學習PHP的知識和新特性
- 和同行直接溝通、交流
- 學好英語,走向國際
- 如何參與
- 瀏覽官網和極思維還有看云
- 回答ThinkPHP新手的問題
- 嘗試發現ThinkPHP的bug,告訴官方人員或者push request
- 開發能提高效率的ThinkPHP工具
- 嘗試翻譯官方文檔
- 幫新手入門
- 創造基于ThinkPHP的產品,進行連帶推廣
- 展望未來
- OneThink
- ThinkPHP4
- 附錄