tp3與tp5的區別 以及 tp5與laravel的區別
Tp3 和 Tp5之間的區別
Tp5版本和Tp3的差異較大的,它們的主要區別:
1.URL和路由
5.0的URL訪問不再支援普通URL模式,路由也不支援正則路由定義,而是全部改為規則路由配合變數規則(正則定義)的方式:
主要改進有以下幾點:
1.增加路由變數規則、
2.增加組合變數支援、
3.增加資源路由、
4.增加路由分組、
5.增加閉包定義支援、
6.增加MISS路由定義、
7.支援URL路由規則反解析。
2.請求物件和響應物件
5.0新增了請求物件Request和響應物件Response,Request統一處理請求和獲取請求資訊,Response物件負責輸出客戶端或者瀏覽器響應。
3.模組和控制器
控制器的名稱空間有所調整,甚至可以無需繼承任何的控制器類。
應用名稱空間統一為app(可定義)而不是模組名;
控制器的類名預設不帶Controller字尾,可以配置開啟use_controller_suffix引數啟用控制器類字尾;
控制器操作方法採用return方式返回資料 而非直接輸出;
廢除原來的操作前後置方法;
增加beforeActionList屬性定義前置操作;
支援任意層次的控制器定義和訪問;
URL訪問支援自動定位控制器;
4.資料庫
5.0的資料庫查詢功能增強,原先需要通過模型才能使用的鏈式查詢可以直接通過Db類呼叫,原來的M函式呼叫可以改用Db函式,例如:
3.2版本的語法
M(‘User’)->where([‘name’=>‘thinkphp’])->find();
5.0版本的語法
Db(‘User’)->where(‘name’,‘thinkphp’)->find();
主要改進如下:
支援鏈式查詢操作;
資料查詢支援返回物件、陣列和PDOStatement物件;
資料集查詢支援返回陣列和Collection物件;
增加查詢構造器,查詢語法改變;
支援閉包查詢;
支援分塊查詢;
支援檢視查詢;
增加SQL監聽事件;
5.模型
5.0的模型變化是最大的,基本上模型是完全面向物件的概念,包括關聯模型,模型類的字尾不再帶Model,直接由名稱空間區分,原來的D函式呼叫改為model函式,並且必須建立對應的模型類,例如:
3.2版本的語句
D(‘User’)->where([‘name’=>‘thinkphp’])->find();
5.0版本的語句
model(‘User’)->where(‘name’,‘thinkphp’)->find();
主要改進包括:
重構關聯模型;
支援聚合模型;
廢除檢視模型(改為資料庫的檢視查詢方法);
模型的擴展采用Trait機制;
增加獲取器和修改器;
增加時間戳自動寫入;
增加型別欄位轉換;
陣列訪問支援;
JSON序列化支援;
6.自動驗證和自動完成
5.0的資料自動驗證和自動完成和3.2版本區別較大,5.0的資料驗證採用驗證器定義並且通過think\Validate類進行統一的驗證。自動完成則通過在模型裡面定義修改器來完成。
7.異常
5.0對與錯誤的出現特別嚴格,預設情況下會對任何級別的錯誤丟擲異常(但可以在應用公共檔案中設定錯誤級別),並且重新設計了異常頁面,展示了詳盡的錯誤資訊,便於除錯。
8.除錯和日誌
5.0的頁面Trace強化,支援瀏覽器控制檯檢視Trace資訊。
5.0的日誌驅動增加Socket方式,採用SocketLog支援遠端除錯。
9.常量
5.0版本廢棄了原來的大部分常量定義,僅僅保留了框架的路徑常量定義,其餘的常量可以使用App類或者Request類的相關屬性或者方法來完成,或者自己重新定義需要的常量。
廢除的常量包括:
REQUEST_METHOD、 IS_GET 、IS_POST、IS_PUT IS_DELETE 、IS_AJAX EXT
Laravel框架與thinkphp5框架有哪些區別
第一點就是它們渲染模板的方式不同:
Thinkphp語句是:$this->display()
Laravel語句是:return view()
第二種是它們的跨站方式不同:
Thinkphp需要手動完成防止跨站攻擊的程式碼
Laravel考慮到跨轉請求偽造,使用form表單以post方式傳值,且要在form表單中加入{{ csrf_field() }}來完成,不加會顯示token令牌錯誤
第三點就是路由不同:
Thinkphp(3.2)必要要填寫控制器,否則無法訪問
Lavarel是一個重路由的框架,所有的功能都是由路由發起的。他可以沒有控制器方法,沒有模型,沒有檢視,但是一定要有路由。
第四點就是中介軟體:
Thinkphp:沒有中介軟體
Laravel:具有中介軟體,可以實現訪問前後的處理(請求和返回,許可權認證等)
還有If和foreach語句區別:
Thinkphp:和原生php中的寫法一致
Laravel:在編寫的時候一定要新增@符號(@[email protected] @[email protected])
第五點就是加密方式不同:
Thinkphp:它採用的是thinkphp內建演算法中的md5()加密演算法,易被外界逆向破解,強行破除。
Laravel:採用的是內建的hash加密(單向加密方法),沒有逆向破解的說法.
laravel裡內建了大量的方法供開發者使用,在實際應用中更接近於"讓物件完成一切"的開發思想,比如在後臺表單驗證的時候,Laravel內建了大量的驗證方法,例如對使用者名稱的驗證:我們使用可以validate方法裡’username’=>‘required’(不能為空)|alpha_dash(必須數字字母下劃線)等