從Laravel 4遷移到Laravel 5:循序漸進指南
Laravel 5 已經發布,但人們對變化的恐懼依然存在。我們不斷聽到人們抱怨一些重大的改變,例如新的文件夾結構。我的應用如果執行composer update
會崩潰嗎?
本文將指導您如何將現有的Laravel 4應用遷移到Laravel 5,並了解新的文件夾結構。
關鍵要點
composer.json
文件、更新路由、控制器和視圖,以及修改任何自定義代碼以使用Laravel 5中的新功能和更改。 安裝
我現有的Laravel 4應用程序是一個之前的關於使用Google Analytics API的文章中的演示程序。該應用程序代碼不多,但足以用於我們的教程。
讓我們首先在計算機上安裝Laravel 5,並創建一個臨時文件夾來保存我們的Laravel 4版本的應用程序。
composer create-project laravel/laravel --prefer-dist
我更喜歡通過composer安裝Laravel,但您可以訪問文檔以了解更多關於Laravel安裝程序的信息。
您可以使用存儲庫中的Vagrant虛擬機,或使用Homestead Improved。如果一切順利,您應該會看到Laravel 5的歡迎頁面。
配置文件
舊的app/config
文件夾現在位於應用程序的根目錄下,因此我們必須將app/config/analytics.php
移動到config/analytics.php
。憑據直接粘貼到文件中,所以為什麼不使用環境變量呢?
// config/analytics.php return [ 'app_name' => env('app_name'), 'client_id' => env('client_id'), 'client_secret' => env('client_secret'), 'api_key' => env('api_key') ];
<code>// .env app_name='YOUR APP NAME' client_id='YOUR CLIENT ID' client_secret='CLIENT SECRET' api_key='API KEY'</code>
.env
文件會自動加載,可用於將本地環境配置與生產環境、測試環境等分開。
路由
Laravel 4路由註冊在app/routes.php
中。在Laravel 5中,所有與HTTP相關的部分都分組在app/Http
文件夾下,包括路由,因此讓我們將app/routes.php
移動到app/Http/routes.php
。
Laravel 5已從過濾器遷移到中間件,因此如果您的路由中包含任何過濾器,請確保將其更改為中間件。
Route::get('/report', ['middleware' => 'auth', function() { // }]);
如果您有自定義過濾器,您可以將其遷移為中間件。我的路由中使用了一個GoogleLogin中間件,實現如下所示。
composer create-project laravel/laravel --prefer-dist
// config/analytics.php return [ 'app_name' => env('app_name'), 'client_id' => env('client_id'), 'client_secret' => env('client_secret'), 'api_key' => env('api_key') ];
<code>// .env app_name='YOUR APP NAME' client_id='YOUR CLIENT ID' client_secret='CLIENT SECRET' api_key='API KEY'</code>
默認情況下會添加CRSF保護中間件。如果要刪除它,您可以轉到app/Http/Kernel.php
文件並註釋掉相應的行。
控制器
因為我們的控制器被認為是HTTP邏輯的一部分,我們需要將app/controllers/*
移動到app/Http/Controllers
並使用App\Http\Controllers
命名空間。您需要修復的最後一個問題是將BaseController更改為Controller類。
如果您不喜歡App根命名空間,您可以使用以下artisan命令全局更改它。
Route::get('/report', ['middleware' => 'auth', function() { // }]);
遷移
我們的Google Analytics應用程序沒有任何本地數據庫交互,但升級過程值得一提。
app/database
目錄現在位於/database
文件夾內,您只需要將文件移動到那裡即可。該目錄已經包含一個users表和一個password_resets表,您可以根據需要刪除或更新它們。
模型
Laravel 4中的models文件夾消失了,Laravel 5直接在app文件夾中放置User模型作為示例。您也可以將您的模型複製到那裡,並使用App命名空間。
但是,如果您不喜歡將模型放在那裡的想法,您可以在app目錄下創建一個名為Models的新文件夾,但不要忘記使用App\Models
命名空間為您的類命名空間。
// app/Http/Middleware/GoogleLogin.php class GoogleLogin { public function handle($request, Closure $next) { $ga = \App::make('\App\Services\GoogleLogin'); if (!$ga->isLoggedIn()) { return redirect('login'); } return $next($request); } }
應用程序服務
我們的src文件夾包含一個GA_Service和一個GA_Utils類。如果我們認為它們是服務,我們可以將它們放在app/Services
中。否則,我們可以創建一個名為app/GA
的新文件夾,我們將在此處存儲我們的服務類。這將導致問題,因為我們一開始沒有使用PSR-4自動加載,因此我們需要使用正確的新的命名空間更新控制器中的類引用。
視圖
應用程序視圖從app/views
文件夾移動到resources/views
文件夾。
resources文件夾還包含用於應用程序本地化的lang文件夾,以及用於前端資源的assets文件夾。 Laravel 5引入了Elixir,它將Gulp任務運行器適配到Laravel開發環境。
Composer
確保您複製應用程序的composer依賴項並進行任何必要的升級。對於我們的演示,我將把"google/apiclient": "1.1.*"
移動到新的composer.json
中,並執行composer update
以反映這些更改。
表單和HTML
illuminate/html
包已從Laravel 5的默認安裝中移除,您需要單獨安裝它。
要將HTML輔助函數帶回到您的項目中,您需要將"illuminate/html": "5.0.*"
包添加到您的composer.json
中並運行composer update
,然後您需要將'Illuminate\Html\HtmlServiceProvider'
添加到您的config/app.php
提供程序數組中。如果您想在blade模板中使用Html和Form外觀,您可以將以下外觀添加到您的config/app.php
外觀數組中。
composer create-project laravel/laravel --prefer-dist
結論
升級到Laravel 5的過程的複雜性和持續時間始終取決於您的應用程序的大小,對於您的特定情況,該過程可能比此示例長得多。在本文中,我們試圖解釋常見的過程,該過程應該可以處理大多數(如果不是全部)需要更改的內容。
您不必升級到新的文件夾結構,您可以保留舊的結構,只更新您的composer依賴項,但這並不是推薦的做法。如果您有任何問題或意見,請務必在下面發布。有關更多信息,請參閱完整的版本升級指南。
Laravel 4到Laravel 5升級指南常見問題解答(FAQs)
Laravel 5在Laravel 4的基礎上引入了許多新功能和改進。這些包括新的目錄結構、改進的路由、更好的環境配置處理以及新的組件,如Socialite、Elixir和Scheduler。 Laravel 5還引入了一個新的命令行界面,稱為Artisan,它為常見任務提供許多有用的命令。
Laravel 5引入了一種新的環境配置處理方式。 Laravel 5不再使用單個.env.php
文件,而是為每個環境使用一個.env
文件。這使得管理不同環境的不同配置更容易。您可以在.env
文件中設置環境變量,Laravel將自動加載它們。
Laravel 5引入了一個新的目錄結構,該結構旨在更直觀和靈活。 app目錄現在是應用程序的根目錄,它包含應用程序不同部分的幾個子目錄,例如Http、Providers和Console。 public目錄現在是Web服務器的根目錄,它包含您的資源,例如圖像、JavaScript和CSS文件。
從Laravel 4升級到Laravel 5包含幾個步驟。首先,您需要更新您的composer.json
文件以要求最新版本的Laravel。然後,您需要更新應用程序的代碼以使用Laravel 5中的新功能和更改。這可能涉及更新您的路由、控制器和視圖,以及您編寫的任何自定義代碼。
Laravel Elixir是Laravel 5中的一個新組件,它為定義基本的Gulp任務提供了一個簡潔流暢的API。它支持常見的CSS和JavaScript預處理器,如Sass和CoffeeScript,它還提供了一種方便的方法來版本化和連接您的資源。
Laravel 5引入了一個新的路由系統,它比Laravel 4中的路由系統更靈活和強大。路由現在在app/Http/routes.php
文件中定義,您可以對路由進行分組,為它們應用中間件,甚至為它們命名空間。
Laravel Socialite是Laravel 5中的一個新組件,它提供了一種簡單方便的方法來使用OAuth提供程序進行身份驗證。它開箱即用地支持多個流行的提供程序,您還可以添加自己的自定義提供程序。
Laravel 5引入了一個新的命令行界面,稱為Artisan,它為常見任務提供許多有用的命令。您可以使用Artisan生成樣板代碼、運行數據庫遷移,甚至啟動本地開發服務器。
Laravel 5.0引入了一些新功能,包括新的目錄結構、改進的路由、更好的環境配置處理以及新的組件,如Socialite、Elixir和Scheduler。它還引入了一個新的命令行界面,稱為Artisan。
Laravel 5提供了一個強大的數據庫遷移系統,允許您對數據庫模式進行版本控制。您可以使用Artisan命令行工具創建遷移,然後使用migrate命令運行它們。這使得在不同環境中應用數據庫模式更改變得容易。
以上是Laravel 4至Laravel 5-簡單升級指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!