W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
推薦的升級方式是建立一個全新的 Laravel 5.0 項目,然后復制您在 4.2 的文件到此新的應用程序,這將包含控制器、路由、Eloquent 模型、Artisan 命令(Asset)、資源和關于此應用程序的其他特定文件。
最開始,安裝新的 Laravel 5 應用程序到新的本地目錄下,我們將詳細探討遷移各部分的過程。
別忘了將任何附加于 Composer 的依賴組件加入 5.0 應用程序內(nèi),包含第三方代碼(例如 SDKs)。
部分組件也許不兼容剛發(fā)布的 Laravel 5 版本,請向組件管理者確認該組件支持 Laravel 5 的版本,當您在 Composer 內(nèi)加入任何組件,請執(zhí)行 composer update
。
默認情況下,Laravel 4 沒有在應用程序的源碼中使用命名空間,所以,舉例來說,所有的 Eloquent 模型和控制器僅存在「全局」的命名空間下,為了更快速的遷移,Laravel 5 也允許您可以將這些類別一樣保留在「全局」的命名空間。
復制新的 .env.example
文件到 .env
,在 5.0 這相當于原本的 .env.php
。像是您的 APP_ENV
和 APP_KEY
(您的加密鑰匙)、數(shù)據(jù)庫認證和您的緩存驅(qū)動與 session
驅(qū)動。
此外,復制原先自定義的 .env.php
文件,并修改為 .env
(本機環(huán)境的真實設置值) 和 .env.example
(給其他團隊成員的示例)。
更多關于環(huán)境設置值,請見完整文檔。
注意: 在部署 Laravel 5 應用程序之前,您需要在正式主機上放置 .env 文件并設置適當?shù)闹怠?/p>
Laravel 5.0 不再使用 app/config/{environmentName}/
目錄結構來提供對應該環(huán)境的設置文件,取而代之的是,將環(huán)境對應的設置值復制到 .env
,然后在設置文件使用 env('key', 'default value')
來訪問,您可以在 config/database.php
文件內(nèi)看到相關范例。
將設置文件放在 config/
目錄下,來表示所有環(huán)境共用的設置文件,或是在文件內(nèi)使用 env()
來取得對應該環(huán)境的設置值。
請記住,若您在 .env
文件內(nèi)增加 key
值,同時也要對應增加到 .env.example
文件中,這將可以幫助團隊成員修改他們的 .env
文件。
復制原本的 routes.php
文件到 app/Http/routes.php
。
下一步,請將所有的控制器復制到 app/Http/Controllers
目錄,既然在本指南中我們不打算遷移到完整的命名空間,請將 app/Http/Controllers
添加到 composer.json
的 classmap
,接下來,您可以從 app/Http/Controllers/Controller.php
基礎抽象類中移除命名空間,并確認遷移過來的控制器要繼承這個基礎類。
在 app/Providers/RouteServiceProvider.php
文件中,將 namespace
屬性設置為 null
。
將過濾器綁定從原來的 app/filters.php
復制到 app/Providers/RouteServiceProvider.php
的 boot()
方法中,并在 app/Providers/RouteServiceProvider.php
加入 use Illuminate\Support\Facades\Route;
來繼續(xù)使用 Route Facade
。
您不需要移動任何 Laravel 4.0 默認的過濾器,像是 auth
和 csrf
。他們已經(jīng)內(nèi)置,只是換作以中間件形式出現(xiàn)。那些在路由或控制器內(nèi)有參照到舊有的過濾器 (例如 ['before' => 'auth']) 請修改參照到新的中間件 (例如 ['middleware' => 'auth'].)
Laravel 5 并沒有將過濾器移除,您一樣可以使用 before
和 after
綁定和使用您自定義的過濾器。
默認情況下,所有路由都會使用CSRF 保護。若想關閉他們,或是在指定在特定路由開啟,請移除 App\Http\Kernel
中 middleware
數(shù)組內(nèi)的這一行:
'App\Http\Middleware\VerifyCsrfToken',
如果您想在其他地方使用它,加入這一行到 $routeMiddleware:
'csrf' => 'App\Http\Middleware\VerifyCsrfToken',
現(xiàn)在,您可于路由內(nèi)使用 ['middleware' => 'csrf'] 即可個別添加中間件到路由/控制器。了解更多關于中間件,請見完整文檔。
你可以建立新的 app/Models
目錄來放置所有 Eloquent 模型。并且同樣的,在 composer.json
將此目錄添加到 classmap
內(nèi)。
在模型內(nèi)加入 SoftDeletingTrait
來使用 Illuminate\Database\Eloquent\SoftDeletes
.
Eloquent 不再提供 remember
方法來緩存查詢?,F(xiàn)在你需要手動使用 Cache::remember
方法快速緩存。了解更多關于緩存,請見完整文檔。
要使用 Laravel 5 的會員認證系統(tǒng),請遵循以下指引來升級您的 User 模型:
從 use 區(qū)塊刪除以下內(nèi)容:
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
添加以下內(nèi)容到 use 區(qū)塊:
use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
移除 UserInterface 和 RemindableInterface 接口。
實現(xiàn)以下接口:
implements AuthenticatableContract, CanResetPasswordContract
在類中聲明引入以下 traits:
use Authenticatable, CanResetPassword;
如果你引入了上面的 traits
,從 use
區(qū)塊和類聲明中移除 Illuminate\Auth\Reminders\RemindableTrait
和 Illuminate\Auth\UserTrait
Laravel Cashier 的 trait 和接口名稱已作修改。trait 請改用 Laravel\Cashier\Billable
取代 BillableTrait
。接口請改用 Laravel\Cashier\Contracts\Billable
取代 Larave\Cashier\BillableInterface
。不需要修改任何方法。
將所有的命令從舊的 app/commands
目錄移到新的 app/Console/Commands
目錄。接下來,把 app/Console/Commands
目錄添加到 composer.json
的 classmap
中。
然后,復制 Artisan 命令列表從 start/artisan.php
到 app/Console/Kernel.php
文件的 command 數(shù)組內(nèi)。
如果在您的數(shù)據(jù)庫內(nèi)已經(jīng)有 users
表,請移除 Laravel 5 內(nèi)置的兩個遷移文件。
將所有的遷移文件從舊的 app/database/migrations
目錄復制到新的 database/migrations
。所有的數(shù)據(jù)填充文件也要從 app/database/seeds
復制到 database/seeds
。
若您在 start/global.php
有綁定任何 IoC,請將它們復制到 app/Providers/AppServiceProvider.php
內(nèi)的 register
方法,您可能需要引入 App facade。
你可以選擇將這些綁定,依照類型拆分到不同的服務提供者中。
將所有的視圖從舊的 app/views
復制到新的 resources/views
目錄內(nèi)。
從安全的角度考慮,Laravel 5.0 會過濾所有輸出,不論您使用 {{ }}
或 {{{ }}}
標簽。您可以使用 {!! !!}
新的標簽來取消輸出過濾。請務必 確定 輸出內(nèi)容是安全地才使用 {!! !!}
標簽。
不過,如果您 仍然必須 使用舊的 Blade 語法,請在 AppServiceProvider@register
開頭加入以下內(nèi)容:
\Blade::setRawTags('{{', '}}');
\Blade::setContentTags('{{{', '}}}');
\Blade::setEscapedContentTags('{{{', '}}}');
但是輕易不要這樣做,這可能使您的應用進程更加容易受到 XSS 攻擊,并且用 {{--
來注釋代碼將不再起作用。
將所有的多語言配置文件從舊的 app/lang
目錄復制到新的resources/lang
目錄。
將 4.2 版公共目錄內(nèi)的資源復制到新應用程序內(nèi)的public 目錄。并確認保留 5.0 版的 index.php 文件。
將所有的測試文件從舊的 app/tests
復制到 tests
目錄。
復制項目內(nèi)其他各式各樣的文件,例如:.scrutinizer.yml
, bower.json
以及其他類似工具的設置文件。
您可以將 Sass,Less 或 CoffeeScript 移動到任何您想放置的地方。 resources/assets
目錄是一個不錯的默認位置。
如果您使用表單或 HTML 輔助函數(shù),您將會看到以下錯誤 class 'Form' not found
或 class 'Html' not found
。Form
類以及 HTML
輔助函數(shù)在 Laravel 5.0 中已經(jīng)廢棄了;不過,這里有一些替代方法,比如基于社區(qū)驅(qū)動的,由 Laravel Collective
維護。
比如,你可以在 composer.json 文件中的 require 區(qū)塊增加 "laravelcollective/html": "~5.0"。
您也需要添加表單和 HTML 的 facades 以及服務提供者。 編輯 config/app.php
文件,添加此行到 'providers' 數(shù)組內(nèi):
'Collective\Html\HtmlServiceProvider',
接著,添加以下到 'aliases' 數(shù)組內(nèi):
'Form' => 'Collective\Html\FormFacade',
'Html' => 'Collective\Html\HtmlFacade',
如果您的程序注入 Illuminate\Cache\CacheManager
來取得非 Facade 版本的 Laravel 緩存,請改用 Illuminate\Contracts\Cache\Repository
注入。
請將所有的 $paginator->links()
用 $paginator->render()
取代。
Replace any calls to $paginator->getFrom() and $paginator->getTo() with $paginator->firstItem() and $paginator->lastItem() respectively.
Remove the "get" prefix from calls to $paginator->getPerPage(), $paginator->getCurrentPage(), $paginator->getLastPage() and $paginator->getTotal() (e.g. $paginator->perPage()).
Laravel 5.0 使用 "pda/pheanstalk": "~3.0"
取代原本的 "pda/pheanstalk": "~2.1"
。
Remote 組件已不再使用。
工作區(qū)組件已不再使用。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: