THINKPHP 常見的問題
碰到問題前先看下官方的問題總結和說明:ThinkPHP5.0學習須知和常見問題集[傳送門](http://www.thinkphp.cn/topic/38624.html)
目前最佳的V5教程是官方的 《?[ThinkPHP5.0快速入門](http://www.hmoore.net/thinkphp/thinkphp5_quickstart)?》
**首先不要帶著3.2版本的思維習慣和定式來理解和使用TP5 ,TP5是一個全新的顛覆重構版本,跨版本發布是經過深思熟慮的結果,不是鬧著玩的,在很多方面TP5對原有的開發模式進行了顛覆,這其中最大的莫過于對模型和數據庫的重構了。從某種意義上來說,如果你不徹底理解5.0的模型用法,那么你將無法正確掌握TP5,就算是你把老項目遷移到5.0上,也不代表你理解5.0的心。?**
**重要說明:想要學習和掌握TP5,必先掌握兩個知識:對象和命名空間、對象和命名空間、對象和命名空間,重要事情說三遍。如果你還沒有掌握這兩個,TP5估計與你無緣了**
原有的老版本開發的項目將很難升級到5.0版本,至少從5.0RC3版本開始,這一問題顯得非常的越來越明顯,如果你試圖這么做,那么請確保你有足夠的能力,因為不要指望官方會浪費時間在老版本的兼容和升級上來,我們已經下決心徹底放棄兼容升級的可能,并重新評估哪些方面的不良習慣是需要糾正的。?
**如果你有發現問題,請使用最新版本的github版本測試是否依然還有問題,同時官方對反饋問題的修正只是表明我們在github版本庫上已經進行了修正,并不代表下載包會及時更新。同時在線完全開發手冊也是針對最新的版本庫進行同步更新,如發現用法不符,請及時更新到最新的框架版本**
下面是作為一個新手(我們姑且稱之為新手吧~)經常會問到的問題列表,稍加整理,以后會增補:?
(更多的常見問題請參考:[ThinkPHP5.0快速入門](http://www.hmoore.net/thinkphp/thinkphp5_quickstart)?->附錄->常見問題集)
* **關于老版本升級。tp5改動太大,非實力派和精力派不推薦老版本系統升級。**
1. ### 單字母函數問題
單字母函數目前已被助手函數替換了。從官方的解釋來說,單字母函數已經是時候功成身退了。整個thinkphp5框架進行了重構之后,核心框架不再依賴單字母函數。所以單字母函數消失了。不過可以自行恢復過來,不過推薦盡量不要用了,這個單字母函數一直褒貶不一。盡量看看主流的框架使用吧。?
解決方式:
* 使用助手函數來完成單字母函數。 在助手函數里面處理 可以改為單字母函數
參考官方thinkphp5完全開發的文檔
* [http://www.hmoore.net/manual/thinkphp5/144731](http://www.hmoore.net/manual/thinkphp5/144731)
2. ### URL訪問出錯
可能出現問題的原因,THINKPHP5所有訪問均使用pathinfo模式。如果不支持PATHINFO的服務器可以使用兼容模式訪問如下:
> [http://serverName/應用入口文件?s=/模塊/控制器/操作/[參數名/參數值...](http://servername/%E5%BA%94%E7%94%A8%E5%85%A5%E5%8F%A3%E6%96%87%E4%BB%B6?s=/%E6%A8%A1%E5%9D%97/%E6%8E%A7%E5%88%B6%E5%99%A8/%E6%93%8D%E4%BD%9C/[%E5%8F%82%E6%95%B0%E5%90%8D/%E5%8F%82%E6%95%B0%E5%80%BC...)]
3. ### 部分模板常量不再存在如`__ROOT__`、`__APP__`、`__SELF__`等
解決方案:自己在config.php 上增加 例如:
~~~
if (!IS_CLI) {
// 當前文件名
if (!defined('_PHP_FILE_')) {
if (IS_CGI) {
//CGI/FASTCGI模式下
$_temp = explode('.php', $_SERVER['PHP_SELF']);
define('_PHP_FILE_', rtrim(str_replace($_SERVER['HTTP_HOST'], '', $_temp[0] . '.php'), '/'));
} else {
define('_PHP_FILE_', rtrim($_SERVER['SCRIPT_NAME'], '/'));
}
}
if (!defined('__ROOT__')) {
$_root = rtrim(dirname(_PHP_FILE_), '/');
define('__ROOT__', (($_root == '/' || $_root == '\\') ? '' : $_root));
}
define('PHP_FILE', _PHP_FILE_);
}
if(!defined('__APP__'))
define('__APP__', strip_tags(PHP_FILE));
// URL常量
if(!defined('__SELF__'))
define('__SELF__', strip_tags($_SERVER[C('URL_REQUEST_URI')]));
~~~
參考文檔:THINKPHP5簡明開發文檔?[http://www.hmoore.net/thinkphp/thinkphp5-guide/90317](http://www.hmoore.net/thinkphp/thinkphp5-guide/90317)
4. ### 視圖問題 TP5使用return返回。對API友好,但對視圖不友好。所以this->display();這種是不可以的;
解決方法:視圖繼承think/controller;然后return $this->fetch(); 未繼承think/controller后,return view('index/hello');
5. ### 模型改動 M函數已取消,進行數據查詢時不用實例化了,
> 所有的查詢都是靜態方法實現的如:
> Db::table('think_user')->select();
> 如果省略表前綴可以使用?
> Db::name('user')->select();
6. ### 安裝問題
thinkphp5支持composer安裝。作為一個phper,個人覺得非常有必要學習一下composer。
傳送門:[composer備忘錄](http://www.hmoore.net/iwzh/wzhquestion/132015)
- PHP學習
- PHP應用
- PHP函數總結整理
- 39個對初學者非常有用的PHP技巧
- 深入淺出之Smarty模板引擎工作機制
- 數組操作
- file操作的常用方法
- PHP字符串輸出之Heredoc說明
- require(_once)和include(_once)的理解
- PHP提高效率的幾點
- php無限遍歷目錄
- 53個要點提高PHP編程效率
- THINKPHP
- THINKPHP 常見的問題
- 微信
- 微信公眾號接口
- 微信小程序開發資料收集
- 微信小程序開發:MINA
- 通過微信小程序看前端
- 微信小程序開發初體驗
- 微信小程序 Demo(豆瓣電影)
- API應用
- 支付寶
- 二維碼轉換
- 前端開發
- HTML5
- CSS
- 七種css方式讓一個容器水平垂直居中
- JavaScript
- JavaScript奇技淫巧44招
- JavaScript筆記
- 后端開發
- Node
- SQL數據庫
- 服務維護
- git使用
- Git入門私房菜
- MAC終端維護
- VIM命令大全
- 開發規范
- 智能手機屏幕的秘密
- 超實用六步透視網易設計規范(附完整PDF下載)
- UI設計常用字體規范
- APP界面切圖命名和文件整理規范
- 網頁UI視覺設計規范
- ios視覺設計規范說明
- 開發APP時需要注意的原則
- 移動端APP設計初步入門
- Axure
- 基礎操作
- 基礎1-10
- 基礎11-20
- 基礎21-30
- 基礎31-40
- 基礎41-50
- 基礎51-60
- Sketch
- 軟件使用
- sublime3_用戶設置
- sublime下如何修改自動補全 后lang=zh-cn?
- 運營理念
- 新人指導心得體會
- 從一次活動設計,聊聊交互設計師的3個階段
- 詳情頁優化那些不得不說的細節
- 店鋪裝修淺析
- 淘寶店鋪裝修之寶貝詳情頁的布局教程
- 寶貝詳情頁 客戶需求調研及總結
- 寶貝描述樣板房