發(fā)行說(shuō)明/L5新特性

2021-11-03 10:21 更新

支持政策

安全修復(fù)始終應(yīng)用于Laravel的早期主要版本。目前,所有安全補(bǔ)丁和補(bǔ)丁都將應(yīng)用于Laravel5.x和Laravel4.x。

在可行的情況下,安全補(bǔ)丁也將應(yīng)用于更舊版本的框架,如Laravel3.x。

Laravel 5.0

Laravel 5.0 在默認(rèn)的項(xiàng)目上引進(jìn)了新的應(yīng)用程序架構(gòu)。新的架構(gòu)提供了更好的功能來(lái)構(gòu)建健壯的 Laravel 應(yīng)用程序,以及在應(yīng)用程序中全面采用新的自動(dòng)加載標(biāo)準(zhǔn)( PSR-4 )。首先,來(lái)查看一些主要變更:

新的目錄結(jié)構(gòu)

舊的 app/models 目錄已經(jīng)完全被移除。相對(duì)的,你所有的代碼都放在 app 目錄下,以及默認(rèn)使用 App 命名空間。這個(gè)默認(rèn)的命名空間可以使用新的 app:name Artisan 命令來(lái)快速更改。

控制器( controller ),中間件( middleware ),以及請(qǐng)求( requests,Laravel 5.0 中新型態(tài)的類別),現(xiàn)在都存放在 app/Http 的對(duì)應(yīng)目錄下,因?yàn)樗麄兌寂c應(yīng)用程序的 HTTP 傳輸層相關(guān)。除了一個(gè)路由設(shè)置的文件外,所有的中間件現(xiàn)在都拆分開(kāi)成單獨(dú)的類文件。

新的 app/Providers 目錄取代了舊版 Laravel 4.x app/start 里的文件。這些服務(wù)提供者有很多啟動(dòng)應(yīng)用程序相關(guān)的方法,像是錯(cuò)誤處理,日志記錄,路由加載,以及更多。當(dāng)然,你可以自由的建立新的服務(wù)提供者到應(yīng)用程序。

應(yīng)用程序的語(yǔ)言文件和視圖都移到 resources 目錄下。

Contracts

所有 Laravel 主要組件實(shí)現(xiàn)所用的接口都放在 illuminate/contracts 項(xiàng)目下。這個(gè)項(xiàng)目沒(méi)有其他的外部依賴。這些方便、集成的接口,可以讓你用來(lái)讓依賴注入變得低耦合,將可以簡(jiǎn)單作為 Laravel Facades 的替代選項(xiàng)。

更多關(guān)于 contracts 的信息,參考完整文檔。

路由緩存

如果你的應(yīng)用程序全部都是使用控制器路由,你可以使用新的 route:cache Artisan 命令大幅度地加快路由注冊(cè)。這對(duì)于有 100 個(gè)以上路由規(guī)則的應(yīng)用程序很有用,可以大幅度地加快應(yīng)用程序這部分的處理速度。

路由中間件( Middleware )

除了像 Laravel 4 風(fēng)格的路由「過(guò)濾器( filters )」,Laravel 5 現(xiàn)在也支持 HTTP 中間件,而原本的認(rèn)證和 CSRF 「過(guò)濾器」已經(jīng)改寫成中間件。中間件提供了單一、一致的接口取代了各種過(guò)濾器,讓你在請(qǐng)求進(jìn)到應(yīng)用程序前,可以方便地檢查甚至拒絕請(qǐng)求。

更多關(guān)于中間件的信息,參考完整文檔。

控制器方法依賴注入

除了之前有的控制器依賴注入,你現(xiàn)在可以在控制器方法使用類型提示( type-hint )進(jìn)行依賴注入。服務(wù)容器會(huì)自動(dòng)注入依賴,即使路由包含了其他參數(shù)也不成問(wèn)題:

public function createPost(Request $request, PostRepository $posts)
{
    //
}

認(rèn)證基本架構(gòu)

用戶注冊(cè),認(rèn)證,以及重設(shè)密碼的控制器現(xiàn)在已經(jīng)默認(rèn)含括了,包含相對(duì)應(yīng)的視圖,放在 resources/views/auth。除此之外, 「users」 數(shù)據(jù)表遷移也已經(jīng)默認(rèn)存在框架中了。這些簡(jiǎn)單的資源,可以讓你快速開(kāi)發(fā)應(yīng)用程序的業(yè)務(wù)邏輯,而不用陷在撰寫認(rèn)證模板的泥潭上。認(rèn)證相關(guān)的視圖可以經(jīng)由 auth/login 以及 auth/register 路由訪問(wèn)。App\Services\Auth\Registrar 服務(wù)會(huì)負(fù)責(zé)處理用戶認(rèn)證和添加的相關(guān)邏輯。

事件對(duì)象

你現(xiàn)在可以將事件定義成對(duì)象,而不是僅使用字串。例如,查看以下的事件:

class PodcastWasPurchased {

    public $podcast;

    public function __construct(Podcast $podcast)
    {
        $this->podcast = $podcast;
    }

}

這個(gè)事件可以像一般使用那樣被派發(fā):

Event::fire(new PodcastWasPurchased($podcast));

當(dāng)然,你的事件處理會(huì)收到事件的對(duì)象而不是數(shù)據(jù)的列表:

class ReportPodcastPurchase {

    public function handle(PodcastWasPurchased $event)
    {
        //
    }

}

更多關(guān)于使用事件的信息,參考完整文檔。

命令( Commands )、隊(duì)列( Queueing )

除了 Laravel 4 形式的隊(duì)列任務(wù),Laravel 5 以簡(jiǎn)單的命令對(duì)象作為隊(duì)列任務(wù)。這些命令放在 app/Commands 目錄下。下面是個(gè)簡(jiǎn)單的命令:

class PurchasePodcast extends Command implements SelfHandling, ShouldBeQueued {

    use SerializesModels;

    protected $user, $podcast;

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct(User $user, Podcast $podcast)
    {
        $this->user = $user;
        $this->podcast = $podcast;
    }

    /**
     * Execute the command.
     *
     * @return void
     */
    public function handle()
    {
        // Handle the logic to purchase the podcast...

        event(new PodcastWasPurchased($this->user, $this->podcast));
    }

}

Laravel 的基底控制器使用了新的 DispatchesCommands trait,讓你可以簡(jiǎn)單的派發(fā)命令執(zhí)行。

$this->dispatch(new PurchasePodcastCommand($user, $podcast));

當(dāng)然,你也可以將命令視為同步執(zhí)行(而不會(huì)被放到隊(duì)列里)的任務(wù)。事實(shí)上,使用命令是個(gè)好方式,讓你可以封裝應(yīng)用程序需要執(zhí)行的復(fù)雜任務(wù)。更多相關(guān)的信息,參考 command bus 文檔。

數(shù)據(jù)庫(kù)隊(duì)列

database 隊(duì)列驅(qū)動(dòng)現(xiàn)在已經(jīng)包含在 Laravel 中了,提供了簡(jiǎn)單的本地端隊(duì)列驅(qū)動(dòng),讓你除了數(shù)據(jù)庫(kù)相關(guān)軟件外不需安裝其他套件。
Laravel 調(diào)用( Scheduler

過(guò)去,開(kāi)發(fā)者可以產(chǎn)生 Cron 設(shè)置,用以調(diào)用所有他們想要執(zhí)行的命令行指令。然而,這是件很頭痛的事情,你的命令行調(diào)用不再屬于版本控制的一部分,而你必須 SSH 到服務(wù)器里加入 Cron 設(shè)置。

為了讓生活變得簡(jiǎn)單點(diǎn), 讓你可以流暢而且具有表達(dá)性的在 Laravel 里面定義你的命令調(diào)用,而且服務(wù)器只需要單一個(gè) Cron 設(shè)置。

它會(huì)看起來(lái)如下:

$schedule->command('artisan:command')->dailyAt('15:00');

當(dāng)然,快參考完整文檔學(xué)習(xí)所有調(diào)用相關(guān)知識(shí)。

Tinker、Psysh

php artisan tinker 命令現(xiàn)在使用 Justin Hileman 的 Psysh,一個(gè) PHP 更強(qiáng)大的 REPL。如果你喜歡 Laravel 4 的 Boris,你也會(huì)喜歡上 Psysh。更好的是,它可以跑在 Windows!要開(kāi)始使用,只要輸入:

php artisan tinker

DotEnv

比起一堆令人困惑的、嵌套的環(huán)境配置文件目錄,Laravel 5 現(xiàn)在使用了 Vance Lucas 的 DotEnv。這個(gè)套件提供了超級(jí)簡(jiǎn)單的方式管理配置文件,并且讓 Laravel 5 環(huán)境檢測(cè)變得輕松。更多的細(xì)節(jié),參考完整的配置文件文檔。

Laravel Elixir

Jeffrey Way 的 Laravel Elixir 提供了一個(gè)流暢、語(yǔ)義化的接口,可以編譯以及合并 assets。如果你曾經(jīng)在學(xué)習(xí) GruntGulp 被嚇到,不必再害怕了。Elixir 讓使用 Gulp 編譯 Less、Sass 及 CoffeeScript 變得簡(jiǎn)單。它甚至可以幫你執(zhí)行測(cè)試!

更多關(guān)于 Elixir 的信息,參考完整文檔。

Laravel Socialite

Laravel Socialite 是個(gè)可選的,Laravel 5.0 以上兼容的套件,提供了無(wú)痛的 OAuth 認(rèn)證。目前 Socialite 支持 Facebook、Twitter、Google 以及 GitHub。它寫起來(lái)可能像這樣:

public function redirectForAuth()
{
    return Socialize::with('twitter')->redirect();
}

public function getUserFromProvider()
{
    $user = Socialize::with('twitter')->user();
}

不用再花上數(shù)小時(shí)撰寫 OAuth 的認(rèn)證流程。數(shù)分鐘就可開(kāi)始!查看完整文檔 里有所有的細(xì)節(jié)。

Flysystem 集成

Laravel 現(xiàn)在包含了強(qiáng)大的 Flysystem(一個(gè)文件系統(tǒng)的抽象類庫(kù)),提供了無(wú)痛的集成,把本地端文件系統(tǒng)、Amazon S3 和 Rackspace 云存儲(chǔ)集成在一起, 有統(tǒng)一且優(yōu)雅的 API!現(xiàn)在要將文件存到 Amazon S3 相當(dāng)簡(jiǎn)單:

Storage::put('file.txt', 'contents');

更多關(guān)于 Laravel 文件系統(tǒng)集成,參考完整文檔。

Form Requests

Laravel 5.0 使用了 form requests,是繼承了 Illuminate\Foundation\Http\FormRequest 的類。這些 request 對(duì)象可以和控制器方法依賴注入結(jié)合,提供一個(gè)不需樣板的方法,可以驗(yàn)證用戶輸入。讓我們深入點(diǎn),看一個(gè) FormRequest 的示例:

<?php namespace App\Http\Requests;

class RegisterRequest extends FormRequest {

    public function rules()
    {
        return [
            'email' => 'required|email|unique:users',
            'password' => 'required|confirmed|min:8',
        ];
    }

    public function authorize()
    {
        return true;
    }

}

定義好類后,我們可以在控制器動(dòng)作里使用類型提示:

public function register(RegisterRequest $request)
{
    var_dump($request->input());
}

當(dāng) Laravel 的服務(wù)容器辨別出要注入的類別是個(gè) FormRequest 實(shí)例,請(qǐng)求會(huì)被自動(dòng)驗(yàn)證。意味著,當(dāng)你的控制器動(dòng)作被調(diào)用了,你可以安全的假設(shè) HTTP 的請(qǐng)求輸入己經(jīng)被驗(yàn)證過(guò),根據(jù)你在 form request 類別里自定的規(guī)則。甚至,若這個(gè)請(qǐng)求驗(yàn)證不通過(guò),一個(gè) HTTP 重定向(可以自定),會(huì)自動(dòng)發(fā)出,錯(cuò)誤消息可以被閃存到 session 或是轉(zhuǎn)換成 JSON 返回。表單驗(yàn)證就是如此的簡(jiǎn)單。更多關(guān)于 FormRequest 驗(yàn)證,參考文檔。

簡(jiǎn)易控制器請(qǐng)求驗(yàn)證

Laravel 5 基類控制器包含一個(gè) ValidatesRequests trait。這個(gè) trait 包含了一個(gè)簡(jiǎn)單的 validate 方法可以驗(yàn)證請(qǐng)求。如果對(duì)應(yīng)用程序來(lái)說(shuō) FormRequests 太復(fù)雜了,參考這個(gè):

public function createPost(Request $request)
{
    $this->validate($request, [
        'title' => 'required|max:255',
        'body' => 'required',
    ]);
}

如果驗(yàn)證失敗,會(huì)拋出異常并且返回對(duì)應(yīng)的 HTTP 回應(yīng)到瀏覽器。驗(yàn)證錯(cuò)誤信息會(huì)被閃存到 session!而如果請(qǐng)求是 AJAX 請(qǐng)求,Laravel 會(huì)自動(dòng)返回 JSON 格式的驗(yàn)證錯(cuò)誤信息。

更多關(guān)于這個(gè)新方法的信息,參考這個(gè)文檔。

新的 Generators

因采用了新的應(yīng)用程序默認(rèn)架構(gòu),框架也添加了 Artisan generator 命令。使用 php artisan list 查看更多細(xì)節(jié)。

配置文件緩存

你現(xiàn)在可以在單一文件里緩存所有配置文件了,使用 config:cache 命令。

Symfony VarDumper

常用的 dd 輔助函數(shù),其可以在除錯(cuò)時(shí)印出變量信息,已經(jīng)升級(jí)成使用令人驚艷的 Symfony VarDumper。它提供了顏色標(biāo)記的輸出,甚至數(shù)組可以自動(dòng)縮合。在項(xiàng)目中試試下列代碼:

dd([1, 2, 3]);

Laravel 4.2

此發(fā)行版本的完整變更列表可以從一個(gè) 4.2 的完整安裝下,執(zhí)行 php artisan changes 命令,或者 Github 上的變更紀(jì)錄。此紀(jì)錄僅含括主要的強(qiáng)化更新和此發(fā)行的變更部分。

附注: 在 4.2 發(fā)布周期間,許多小的 bug 修正與功能強(qiáng)化被整并至各個(gè) 4.1 的子發(fā)行版本中。所以最好確認(rèn) Laravel 4.1 版本的更新列表。

PHP 5.4 需求

Laravel 4.2 需要 PHP 5.4 以上的版本。此 PHP 更新版本讓我們可以使用 PHP 的新功能:traits 來(lái)為像是 Laravel 收銀臺(tái) 來(lái)提供更具表達(dá)力的接口。PHP 5.4 也比 PHP 5.3 帶來(lái)顯著的速度及性能提升。

Laravel Forge

Larvel Forge,一個(gè)網(wǎng)頁(yè)應(yīng)用程序,提供一個(gè)簡(jiǎn)單的接口去建立管理你云端上的 PHP 服務(wù)器,像是 Linode、DigitalOcean、Rackspace 和 Amazon EC2。支持自動(dòng)化 nginx 設(shè)置、SSH 密鑰管理、Cron job 自動(dòng)化、透過(guò) NewRelic & Papertrail 服務(wù)器監(jiān)控、「推送部署」、Laravel queue worker 設(shè)置等等。Forge 提供最簡(jiǎn)單且更實(shí)惠的方式來(lái)部署所有你的 Laravel 應(yīng)用程序。

默認(rèn) Laravel 4.2 的安裝里,app/config/database.php 配置文件默認(rèn)已為 Forge 設(shè)置完成,讓在平臺(tái)上的全新應(yīng)用程序更方便部署。

關(guān)于 Laravel Forge 的更多信息可以在官方 Forge 網(wǎng)站上找到。

Laravel Homestead

Laravel Homestead 是一個(gè)為部署健全的 Laravel 和 PHP 應(yīng)用程序的官方 Vagrant 環(huán)境。絕大多數(shù)的封裝包的相依與軟件在發(fā)布前已經(jīng)部署處理完成,讓封裝包可以極快的被啟用。Homestead 包含 Nginx 1.6、PHP 5.5.12、MySQL、Postres、Redis、Memcached、Beanstalk、Node、Gulp、Grunt 和 Bower。Homestead 包含一個(gè)簡(jiǎn)單的 Homestead.yaml 配置文件,讓你在單一個(gè)封裝包中管理多個(gè) Laravel 應(yīng)用程序。

默認(rèn)的 Laravel 4.2 安裝中包含的 app/config/local/database.php 配置文件使用 Homestead 的數(shù)據(jù)庫(kù)作為默認(rèn)。讓 Laravel 初始化安裝與設(shè)置更為方便。

官方文檔已經(jīng)更新并包含在 Homestead 文檔 中。

Laravel 收銀臺(tái)

Laravel 收銀臺(tái)是一個(gè)簡(jiǎn)單、具表達(dá)性的資源庫(kù),用來(lái)管理 Stripe 的訂閱帳務(wù)。雖然在安裝中此組件依然是選用,我們依然將收銀臺(tái)文檔包含在主要 Laravel 文檔中。此收銀臺(tái)發(fā)布版本帶來(lái)了數(shù)個(gè)錯(cuò)誤修正、多貨幣支持還有支持最新的 Stripe API。

Queue Workers 常駐程序

Artisan queue:work 命令現(xiàn)在支持 --daemon 參數(shù)讓 worker 可以以「常駐程序」啟用。代表 worker 可以持續(xù)的處理隊(duì)列工作不需要重啟框架。這讓一個(gè)復(fù)雜的應(yīng)用程序部署過(guò)程中,使得 CPU 的使用有顯著的降低。

更多關(guān)于 Queue Workers 常駐程序信息請(qǐng)?jiān)旈?queue 文檔。

Mail API Drivers

Laravel 4.2 為 Mail 函式采用了新的 MailgunMandrill API 驅(qū)動(dòng)。對(duì)許多應(yīng)用程序而言,他提供了比 SMTP 更快也更可靠的方法來(lái)遞送郵件。新的驅(qū)動(dòng)使用了 Guzzle 4 HTTP 資源庫(kù)。

軟刪除 Traits

對(duì)于軟刪除和全作用域更簡(jiǎn)潔的方案 PHP 5.4 的 traits 提供了一個(gè)更加簡(jiǎn)潔的軟刪除架構(gòu)和全局作用域,這些新架構(gòu)為框架提供了更有擴(kuò)展性的功能,并且讓框架更加簡(jiǎn)潔。

更多關(guān)于軟刪除的文檔請(qǐng)見(jiàn): Eloquent documentation.

更為方便的 認(rèn)證(auth) & Remindable Traits

得益于 PHP 5.4 traits,我們有了一個(gè)更簡(jiǎn)潔的用戶認(rèn)證和密碼提醒接口,這也讓 User 模型文檔更加精簡(jiǎn)。

"簡(jiǎn)易分頁(yè)"

一個(gè)新的 simplePaginate 方法已被加入到查找以及 Eloquent 查找器中。讓你在分頁(yè)視圖中,使用簡(jiǎn)單的「上一頁(yè)」和「下一頁(yè)」鏈接查找更為高效。

遷移確認(rèn)

在正式環(huán)境中,破壞性的遷移動(dòng)作將會(huì)被再次確認(rèn)。如果希望取消提示字符確認(rèn)請(qǐng)使用 --force 參數(shù)。

Laravel 4.1

完整變更列表

此發(fā)行版本的完整變更列表,可以在版本 4.1 的安裝中命令行執(zhí)行 php artisan changes 取得,或者瀏覽 Github 變更檔 中了解。其中只記錄了該版本比較主要的強(qiáng)化功能和變更。

新的 SSH 組件

一個(gè)全新的 SSH 組件在此發(fā)行版本中登場(chǎng)。此功能讓你可以輕易的 SSH 至遠(yuǎn)程服務(wù)器并執(zhí)行命令。更多信息,可以參閱 SSH 組件文檔。

新的 php artisan tail 指令就是使用這個(gè)新的 SSH 組件。更多的信息,請(qǐng)參閱 tail 指令集文檔。

Boris In Tinker

如果您的系統(tǒng)支持 Boris REPLphp artisan thinker 指令將會(huì)使用到它。系統(tǒng)中也必須先行安裝好 readlinepcntl 兩個(gè) PHP 套件。如果你沒(méi)這些套件,從 4.0 之后將會(huì)使用到它。

Eloquent 強(qiáng)化

Eloquent 添加了新的 hasManyThrough 關(guān)系鏈。想要了解更多,請(qǐng)參見(jiàn) Eloquent 文檔。

一個(gè)新的 whereHas 方法也同時(shí)登場(chǎng),他將允許檢索基于關(guān)系模型的約束。

數(shù)據(jù)庫(kù)讀寫分離

Query BuilderEloquent 目前透過(guò)數(shù)據(jù)庫(kù)層,已經(jīng)可以自動(dòng)做到讀寫分離。更多的信息,請(qǐng)參考 文檔。

隊(duì)列排序

隊(duì)列排序已經(jīng)被支持,只要在 queue:listen 命令后將隊(duì)列以逗號(hào)分隔送出。

失敗隊(duì)列作業(yè)處理

現(xiàn)在隊(duì)列將會(huì)自動(dòng)處理失敗的作業(yè),只要在 queue:listen 后加上 --tries 即可。更多的失敗作業(yè)處理可以參見(jiàn) 隊(duì)列文檔。

緩存標(biāo)簽

緩存「區(qū)塊」已經(jīng)被「標(biāo)簽」取代。緩存標(biāo)簽允許你將多個(gè)「標(biāo)簽」指向同一個(gè)緩存對(duì)象,而且可以清空所有被指定某個(gè)標(biāo)簽的所有對(duì)象。更多使用緩存標(biāo)簽信息請(qǐng)見(jiàn) 緩存文檔。

更具彈性的密碼提醒

密碼提醒引擎已經(jīng)可以提供更強(qiáng)大的開(kāi)發(fā)彈性,如:認(rèn)證密碼、顯示狀態(tài)消息等等。使用強(qiáng)化的密碼提醒引擎,更多的信息 請(qǐng)參閱文檔。

強(qiáng)化路由引擎

Laravel 4.1 擁有一個(gè)完全重新編寫的路由層。API 一樣不變。然而與 4.0 相比,速度快上 100%。整個(gè)引擎大幅的簡(jiǎn)化,且對(duì)于路由表達(dá)式的編譯大大減少對(duì) Symfony Routing 的依賴。

強(qiáng)化 Session 引擎

此發(fā)行版本中,我們亦發(fā)布了全新的 Session 引擎。如同路由增進(jìn)的部分,新的 Session 曾更加簡(jiǎn)化且更快速。我們不再使用 Symfony 的 Session 處理工具,并且使用更簡(jiǎn)單、更容易維護(hù)的客制化解法。

Doctrine DBAL

如果你有在你的遷移中使用到 renameColumn,之后你必須在 composer.json 里加 doctrine/dbal 進(jìn)相依套件中。此套件不再默認(rèn)包含在 Laravel 之中。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)