Laravel 在請求須要先定義路由,Tp5能夠不定義,有pathinfo路由便可訪問。
Laravel 在請求以前會有中間件, Tp5會有前置操做和鉤子。php
1.0 Laravel 在表單提交的時候會有csrf 跨站請求僞造驗證,Tp5則沒有。
2.0 Laravel 在請求須要先定義路由,Tp5能夠不定義,有pathinfo路由便可訪問。
3.0 Laravel 在請求以前會有中間件, Tp5會有前置操做和鉤子。html
參考:Laravel 和 Tp5的一些區別 - 簡書
https://www.jianshu.com/p/03e4ac7e3fa3前端
一、TP框架:
ThinkPhp簡單、快速,基於MVC和麪向對象,易用性較高,是一款簡潔實用的輕量級框架。
二、Laravel框架:
Lavavel一直秉承着優雅的原則,很好的支持了composer,實現了更豐富的擴展,社區文檔活躍,相較於TP,Lavavel更龐大,安全性也更高,更適合開發大中型項目,被稱爲「巨匠型開發框架」。
我的感受TP5和Laravel框架的區別已經很小了,相較於TP3,TP5支持了composer安裝,配置文件位置變化,支持了閉包函數,驗證方式也跟Lavarel類似,數據返回方面也可使用return進行數據返回。
三、區別
1)提交數據的方式,Laravel在提交表單時須要在表單中加入{csrf_field}來防止跨域攻擊,而TP不會。
2)路由,Laravel必須先定義,再使用,路由文件爲routes.php,TP在配置文件中開啓路由後,路由格式是:'路由表達式' => '路由地址和參數'(使用路由的前提是URL支持phthinfo而且開啓路由),路由可使URL更符合SEO。
3)中間件,Laravel的中間件,中間件就是HTTP請求到達以前通過的層,經過中間件咱們能夠驗證用戶是否登陸等一些通用操做。
4)操做數據庫方式,均可以使用實例化(創建相對應的模型類)和DB:table('表名')來操做數據庫,使用原生查詢時不太相同,Laravel使用Db::操做('原生sql'),TP使用Db::query('原生sql');
5)Laravel升級十分簡易,而TP大版本的升級要重構代碼。nginx
Laravel最大的強項是充分運用了PHP面向對象的特行和軟件工程的思想,是一個幾近解耦的框架(它引入了各類各樣的設計模式,如IOC模式、以來注入等)。laravel
參考:laravel與TP的區別 - Rerise的博客 - CSDN博客
https://blog.csdn.net/jiangnanqbey/article/details/80860156web
一、Tp
ThinkPHP是一個快速、簡單的基於MVC和麪向對象的輕量級PHP開發框架,遵循Apache2開源協議發佈,從誕生以來一直秉承簡潔實用的設計原則,在保持出色的性能和至簡的代碼的同時,尤爲注重開發體驗和易用性,而且擁有衆多的原創功能和特性,爲WEB應用開發提供了強有力的支持。 3.2版本的服務器環境要求以下: PHP5.3以上版本
二、Laravel
Laravel是一個簡單優雅的PHP Web開發框架,能夠將開發者從意大利麪條式的代碼中解放出來,經過簡單、高雅、表達式語法開發出很棒的Web應用,Laravel擁有更富有表現力的語法、高質量的文檔、豐富的擴展包,被稱爲「巨匠級PHP開發框架」。 laravel框架的安裝知足條件:
PHP版本 >= 5.5.9
PHP擴展:OpenSSL
PHP擴展:PDO
PHP擴展:Mbstring
PHP擴展:Tokenizer
Laravel須要依賴 Composer管理,必須首先安裝Composer。
2、tp與laravel的目錄結構
一、TP目錄結構:
├─index.php 入口文件
├─README.md README文件
├─Application 應用目錄
├─Public 資源文件目錄
└─ThinkPHP 框架目錄
核心代碼目錄:
├─ThinkPHP 框架系統目錄(能夠部署在非web目錄下面)
│├─Common 核心公共函數目錄
│├─Conf 核心配置目錄
│├─Lang 核心語言包目錄
│├─Library 框架類庫目錄
││ ├─Think 核心Think類庫包目錄
││ ├─Behavior 行爲類庫目錄
││ ├─Org Org類庫包目錄
││ ├─Vendor 第三方類庫目錄
││ ├─ ... 更多類庫目錄
│├─Mode 框架應用模式目錄
│├─Tpl 系統模板目錄
│├─LICENSE.txt 框架受權協議文件
│├─logo.png 框架LOGO文件
│├─README.txt 框架README文件
│└─index.php 框架入口文件
① C層放在application/home/controller中,M層在application/home/model,視圖放在application/home/view中。
② Tp裏面使用的模板引擎是smarty,因此傳值以及調用模板爲assign和display。
③ 實現了模板輸出的替換和過濾,如__APP__,__MODULE__,__URL__,__PUBLIC__等
④ 自帶一些緩存的方法,如S (數據緩存) F(快速緩存) cache(查詢緩存)以及靜態緩存
⑤ 對網站安全性有多重防禦,輸入過濾(I方法)、上傳安全、防止XSS攻擊、防止sql注入、表單合法性檢測(create方法建立數據對象的時候,可使用數據的合法性檢測,可使用insertFields 和 updateFiel
ds屬性或者field方法)等
⑥ ThinkPHP提供了靈活的全局配置功能,採用最有效率的PHP返回數組方式定義,支持慣例配置、公共配置、模塊配置、調試配置和動態配置,分別講述了在Apache、IIS、和nginx上的僞靜態配置。‘⑦ thinkphp 也採用了命名空間的方法用來區分每一個文件
⑧ 在ThinkPHP中基礎的模型類就是Think\Model類,該類完成了基本的CURD、ActiveRecord模式、連貫操做和統計查詢,一些高級特性被封裝到另外的模型擴展中。
⑨ 基礎模型類的設計很是靈活,甚至能夠無需進行任何模型定義,就能夠進行相關數據表的ORM和CURD操做,只有在須要封裝單獨的業務邏輯的時候,模型類纔是必須被定義的。
⑩ ThinkPHP有專門爲開發過程而設置的調試模式,開啓調試模式後,會犧牲必定的執行效率,但帶來的方便和除錯功能很是值得。
11 tp中session使用的很是靈活在任何頁面都可以隨意調取,不須要重複的引入,只須要開啓一次session能夠了。 tp中不須要反覆的寫路由tp框架的s ession機制在配置中文件中配置好就能夠用
12 使用系統內置的I函數是避免輸入數據出現安全隱患的重要手段,I函數默認的過濾方法是htmlspecialchars,若是咱們須要採用其餘的方法進行安全過濾,有兩種方式:
+-------------------------------------------------------------------------+
| 'DEFAULT_FILTER' => 'strip_tags'
| 'DEFAULT_FILTER' => 'strip_tags,stripslashes',
+--------------------------------------------------------------------------+
13若是你沒有使用I函數進行數據過濾的話,還能夠在模型的寫入操做以前調用filter方法對數據進行安全過濾,
如 $this->data($data)->filter('strip_tags')->add();
二、Laravel目錄:
app目錄包含了應用的核心代碼;
bootstrap目錄包含了少量文件用於框架的啓動和自動載入配置,還有一個cache文件夾用於包含框架生成的啓動文件以提升性能; config目錄包含了應用全部的配置文件;
database目錄包含了數據遷移及填充文件,若是你喜歡的話還能夠將其做爲 SQLite 數據庫存放目錄;
public目錄包含了前端控制器和資源文件(圖片、JavaScript、CSS等);
resources目錄包含了視圖文件及原生資源文件(LESS、SASS、CoffeeScript),以及本地化文件;
storage目錄包含了編譯過的Blade模板、基於文件的session、文件緩存,以及其它由框架生成的文件,該文件夾被細分爲成app、framework和logs子目錄,app目錄用於存放應用要使用的文件,framework目錄用於存放框架生成的文件和緩存,最後,logs目錄包含應用的日誌文件;
tests目錄包含自動化測試,其中已經提供了一個開箱即用的PHPUnit示例;
vendor目錄是laravel的核心代碼庫,包含Composer依賴;
M層放在在app下面,不用再給專門的文件夾,app/Http下面有個routes.php,專門存放路由,每一個控制器裏的方法必須都要有,app/Http/Controller下面放的是控制器,resources/views下面放的是模版,以.blade.php爲結尾。配置數據庫信息能夠直接在。Env文件中修改就能夠了。
①laravel框架對環境有要求,5.2版本的laravel要求php5.5.9以上,還要開一些擴展。
②在瀏覽器中請求的路由經過app/Http/routes.php進行解析,在進入相應的控制器方法,有get、post、any、match等一些方法③傳值、調用模板return view('user.profile', ['user' => $user]);
④設置session值:默認session只能在本方法中獲取,能夠在app/Http/kernel.php設置。
+-------------------------------------------------------------------------+
| session(['chairs' => 7, 'instruments'=> 3]);
| session()->get('key');session()->put('key', $value);session(‘key’)
+--------------------------------------------------------------------------+
也能夠用$request->session()->get()/put()設置
Laravel的session的配置文件配置在app/config/session.php中session的永久保存(在不過時範圍內)Session::put('key', 'value');
Session驅動(file,cookie,database,memcached,array)
配置文件爲config/session.php
默認使用文件驅動
File session數據存儲在storage/framework/session目錄下
Cookie session數據儲存在通過加密的cookie中
Database session數據儲存在數據庫中
Memcached/redis session數據存儲在memcached/redis中
Array session數據存儲在簡單地數組中,非持久化(經常使用於運行測試)
⑤在AppServiceProvider中使用share方法能夠是全部模板共享數據
⑥{{ $a}}是內置的輸出數據的方法,默認被轉義,可使用{!!$a!!}輸出本來代碼而不會被轉義
⑦@foreach @endforeach @if @elseif @else @endif
⑧模板繼承能夠在視圖中使用同一個主模板,節省代碼,方便管理
⑨數據庫操做可使用原生sql語句也可使用查詢構建器
3、Laravel與Tp的路由
一、laravel路由
laravel必須先定義路由,全部應用路由都定義在app/Http/routes.php文件中。
默認狀況下,routes.php 文件包含單個路由和一個路由羣組,該路由羣組包含的全部路由都使用了中間件組 web,而這個中間件組爲路由提供了 Session 狀態和 CSRF 保護功能。
而thinkphp中開啓路由:「URL_ROUTER_ON」=true;
路由規則的定義格式爲: '路由表達式'=>'路由地址和參數'。 二、TP路由
要使用路由功能,前提是你的URL支持PATH_INFO並開啓路由路由規則的定義格式爲: '路由表達式'=>'路由地址和參數'
4、Laravel與Tp基本配置與視圖以及Laravel的中間件
一、laravel視圖
視圖文件存放在 resources/views 目錄
判斷視圖是否存在用 view()->exists() 在全部視圖之間共享數據片斷,這時候可使用視圖工廠的share方法,一般,須要在服務提供者的boot 方法中調用 share 方法,你能夠將其添加到 AppServiceProvider 或生成獨立的服務提供者來存放它們:
二、數據顯示
Blade 的 {{}} 語句已經通過 PHP 的htmlentities 函數處理以免 XSS 攻擊。 Blade 的 @include 指令容許簡單的在一個視圖中包含另外一個 Blade視圖,能夠傳遞參數到被包含的視圖@include('view.name', ['some' => 'data'])
三、Tp視圖
賦值assign調用頁面display
在當前模版文件中包含其餘的模版文件使用include標籤,Include標籤支持在包含文件的同時傳入參數
四、laravel基本配置
Laravel框架的全部配置文件都存放在 config 目錄下。
.env中的全部配置及其值被載入到 PHP 超全局變量 $_ENV 中
五、Tp配置::
公共配置文件(默認位於Application/Common/Conf/config.php)。獲取已經設置的據庫鏈接 參數值:C('參數名稱')
六、laravel的中間件
Laravel框架自帶了一些中間件,包括維護模式、認證、CSRF保護中間件等。全部的中間件都位於app/Http/Middleware 目錄下。
能夠將中間件看作 HTTP 請求到達目標動做以前必須通過的「層」,每一層都會檢查請求而且能夠徹底拒絕它。分配中間件到路由
首先應該在 app/Http/Kernel.php 文件中分配給該中間件一個簡寫的 key,默認狀況下,該類的 $routeMiddleware 屬性包含了 Laravel 內置的入口中間件,添加你本身的中間件只須要將其追加到後面併爲其分配一個 key:
中間件在 HTTP Kernel 中被定義後,能夠在路由選項數組中使用 $middleware 鍵來指定該中間件: Route::get('admin/profile', ['middleware' => 'auth', function (){ // }]);
5、Laravel與Tp數據庫
一、laravel數據庫
Laravel 支持四種類型的數據庫系統:MySQLPostgres SQLite SQL Server 能夠配置讀寫分離
運行原生 SQL 查詢
DB方法:select, update,insert, delete, 和statement。數據庫事務全部的填充類都位於database/seeds目錄
在run方法中,能夠插入任何你想插入數據庫的數據
可使用 Artisan 命令db:seed來填充數據庫
二、Tp數據庫
目前的數據庫包括Mysql、SqlServer、PgSQL、Sqlite、Oracle、Ibase、Mongo,也包括對PDO的支持。
6、 Laravel與Tp的防範機制面試
參考:TP與laravel簡介 - 少昊 鷹 的 IT博客 - CSDN博客
https://blog.csdn.net/qq_33620483/article/details/78062502redis