欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Laravel 5.0 發(fā)布 新版本特性詳解

 更新時(shí)間:2015年02月10日 08:54:35   作者:裁紙刀下  
這篇文章主要介紹了Laravel 5.0 發(fā)布 新版本特性詳解,本文講解了目錄結(jié)構(gòu)、Contracts、路由緩存、路由中間、控制器方法注入、認(rèn)證腳手架等新特性,需要的朋友可以參考下

譯注: 期待 Laravel 5.0 已經(jīng)很久很久了, 之前跳票說(shuō)要到今年一月份發(fā)布. 從一月份就一直在刷新官網(wǎng)和博客, 始終沒(méi)有更新的消息, 前幾天終于看到官網(wǎng)文檔切換到了 5.0 版. 新版本帶來(lái)了眾多令人激動(dòng)的新特性, 尤其是定時(shí)任務(wù)隊(duì)列和表單請(qǐng)求兩個(gè)特性, 光看一下更新說(shuō)明中的簡(jiǎn)單介紹都忍不住要上手嘗試了. 今天總算抽出一點(diǎn)時(shí)間把官方的新特性說(shuō)明文檔簡(jiǎn)單地翻譯了一下, 希望所有喜歡 Laravel 框架的朋友都能感受到這個(gè)版本帶來(lái)的激動(dòng)人心的改變. 當(dāng)然, 如果你需要的是 Phalcon 那樣的性能, 那它肯定不是你需要的. 如果你是因?yàn)樘摂M主機(jī)不支持 php 5.4 而不能享受 Laravel, 那你還不扔了你的虛擬主機(jī)??? 阿里云\騰訊云\linode... VPS的選擇不要太多...

Laravel 5.0

Laravel 5.0 引入了全新的項(xiàng)目目錄結(jié)構(gòu). 新的目錄結(jié)構(gòu)更有利于用 Laravel 來(lái)創(chuàng)建應(yīng)用. 5.0 版從頭到尾都采用了新的 PSR-4 自動(dòng)加載標(biāo)準(zhǔn). 以下是 5.0 版主要的新特性:

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

以前版本中的 app/models 目錄被整個(gè)移除. 如今你可以直接把代碼放在 app 目錄下, 該目錄下的所有代碼默認(rèn)會(huì)被組織到 app 命名空間. 這個(gè)命名空間是可以通過(guò)新增加的 Artisan 命令 app:name 來(lái)修改的.

Controllers, middleware 和 requests (Laravel 5.0 新增加的一種類(lèi)) 被組織到 app/Http 目錄, 因?yàn)樗麄兌际桥c你應(yīng)用的 HTTP 傳輸層相關(guān)的類(lèi). 與之前把所有路由過(guò)濾器放到單一的 filters 文件下不同, 現(xiàn)在所有的 middleware (類(lèi)似之前的 route filter) 被分別存放到各自自己的類(lèi)文件中.

新版本中增加了一個(gè) app/Providers 目錄來(lái)代替之前 4.x 版本的 app/start 文件. 這些 service providers 為應(yīng)用提供各種各樣的引導(dǎo)方法, 比如錯(cuò)誤處理, 日志記錄, 路由加載等. 除此之外你當(dāng)然也可以創(chuàng)建額外的 service providers.

應(yīng)用的語(yǔ)言文件和視圖被移到了 resources 目錄.

Contracts

Laravel 的所有主要組件都實(shí)現(xiàn)了存放在 illuminate/contracts 倉(cāng)庫(kù)中的接口. 該倉(cāng)庫(kù)沒(méi)有額外的依賴(lài)項(xiàng). 擁有這樣一個(gè)方便的, 集中存放的接口集合, 你就可以很容易地通過(guò)它來(lái)對(duì) Laravel Facades 進(jìn)行解耦和依賴(lài)注入方面的選擇和修改.

了解有關(guān) contracts 的更多信息, 可以查看它的完整文檔.
路由緩存

如果你的應(yīng)用由各種各樣的控制器路由 (controller routes) 組成, 你可以利用新增的 Artisan 命令 route:cache 大幅度提升路由的注冊(cè)速度. 這在路由數(shù)量超過(guò) 100 個(gè)的應(yīng)用中尤其有效, 可以 大幅度 提升整個(gè)應(yīng)用在路由部分的速度.

路由中間件 (Route Middleware)

在 4.0 版風(fēng)格的路由 "過(guò)濾器" 基礎(chǔ)上, 新版 5.0 已經(jīng)支持 HTTP 中間件, Laravel 自帶的 "authentication" 和 "filters" 已經(jīng)被轉(zhuǎn)換成中間件. 中間件為所有類(lèi)型的過(guò)濾器提供了單一接口, 你可以很容易地對(duì)請(qǐng)求進(jìn)行審查和拒絕.

了解有關(guān)中間件的更多信息, 可以查看它的完整文檔.

控制器方法注入

除了現(xiàn)有的構(gòu)造器注入以外, 在新版本中還可以在控制器方法中的依賴(lài)項(xiàng)進(jìn)行類(lèi)型約束. IoC container 會(huì)自動(dòng)注入依賴(lài)項(xiàng), 即使在路由包含其它參數(shù)的時(shí)候也是.

復(fù)制代碼 代碼如下:

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

認(rèn)證腳手架

用戶(hù)注冊(cè), 認(rèn)證以及密碼重置控制器已經(jīng)內(nèi)置在 5.0 版的網(wǎng)站框架中, 除了控制器以外, 還有簡(jiǎn)單的視圖, 存放在 resources/views/auth 目錄. 除此之外, 網(wǎng)站初始框架中還包含了一個(gè) "users" 表的 migration 文件. 這些簡(jiǎn)單的資源幫助開(kāi)發(fā)者不用在用戶(hù)認(rèn)證功能上耗費(fèi)大量時(shí)間. 認(rèn)證相關(guān)的頁(yè)面可以通過(guò) auth/login 和 auth/register 這兩個(gè)路由訪問(wèn). App\Services\Auth\Registrar 服務(wù)負(fù)責(zé)處理創(chuàng)建和認(rèn)證用戶(hù).

事件對(duì)象

在新版本中, 你可以把事件定義成對(duì)象而不是字符串. 看下面的例子:

復(fù)制代碼 代碼如下:

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

這個(gè)事件可以這樣調(diào)用:

Event::fire(new PodcastWasPurchased($podcast));
當(dāng)然, 你的事件處理程序收到的也不再是一個(gè)數(shù)據(jù)列表, 而是一個(gè)事件對(duì)象:

復(fù)制代碼 代碼如下:

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

了解有關(guān)事件的更多信息, 可以查看它的完整文檔.

命令/隊(duì)列

在 4.0 版支持的任務(wù)隊(duì)列基礎(chǔ)上, 5.0 支持把任務(wù)隊(duì)列定義為簡(jiǎn)單的命令對(duì)象. 這些命令存放在 app/Commands 目錄. 下面是一個(gè)簡(jiǎn)單的命令示例:

復(fù)制代碼 代碼如下:

class PurchasePodcast extends Command implements SelfHandling, ShouldBeQueued {
 
    use SerializesModels;
 
    protected $user, $podcast;
 
    /**
     * 創(chuàng)建新的命令實(shí)例
     *
     * @return void
     */
    public function __construct(User $user, Podcast $podcast)
    {
        $this->user = $user;
        $this->podcast = $podcast;
    }
 
    /**
     * 執(zhí)行命令
     *
     * @return void
     */
    public function handle()
    {
        // 處理購(gòu)買(mǎi)播客視頻的邏輯
 
        event(new PodcastWasPurchased($this->user, $this->podcast));
    }
 
}

Laravel 的基礎(chǔ)控制器 (base controller) 使用了新的 DispatchesCommands 特性, 允許你很方便地監(jiān)控命令的執(zhí)行:

$this->dispatch(new PurchasePodcastCommand($user, $podcast));
當(dāng)然, 你不僅可以把命令用于任務(wù)隊(duì)列(非同步執(zhí)行), 也可以用于同步任務(wù). 事實(shí)上, 把你的應(yīng)用需要執(zhí)行的復(fù)雜任務(wù)封裝成命令是一個(gè)很好的選擇. 了解有關(guān)命令的更多信息, 可以查看命令橋的詳細(xì)文檔.

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

新版 Laravel 包含 database 隊(duì)列驅(qū)動(dòng), 提供簡(jiǎn)單的, 本地的隊(duì)列驅(qū)動(dòng), 無(wú)需安裝額外的包. (譯注:比如讓不支持事務(wù)的數(shù)據(jù)庫(kù)進(jìn)行類(lèi)似事務(wù)的數(shù)據(jù)操作)

Laravel 定時(shí)任務(wù)

在過(guò)去, 為了定時(shí)執(zhí)行控制臺(tái)任務(wù), 開(kāi)發(fā)者必須依賴(lài) Cron 任務(wù). 這帶來(lái)很大不便. 因?yàn)槎〞r(shí)任務(wù)并不包括在網(wǎng)站的源代碼中, 而且必須通過(guò) SSH 登陸到服務(wù)器去添加 Cron 任務(wù). 新版 Laravel 的定時(shí)任務(wù)允許開(kāi)發(fā)者在 Laravel 框架內(nèi)來(lái)定義定時(shí)執(zhí)行的命令, 然后只需要在服務(wù)器上定義一個(gè)總的 Cron 任務(wù)即可.

比如:

復(fù)制代碼 代碼如下:

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

同樣的, 了解更多有關(guān)定時(shí)任務(wù)的信息, 可以查閱完整文檔.

Tinker / Psysh

php artisan tinker 命令在新版本中借助了 Justin Heleman 開(kāi)發(fā)的 Psysh. 如果你喜歡 Laravel 4.0 里的 Boris, 你肯定會(huì)喜歡 Psysh. Boris 在 Windows 下運(yùn)行得不好, Psysh 完全支持 Windows! 使用方法和以前一樣:

復(fù)制代碼 代碼如下:

php artisan tinker

DotEnv

在 Laravel 5.0 中, 用 Vance Lucas 實(shí)現(xiàn)的 DotEnv 替代了以前版本中的嵌套結(jié)構(gòu), 容易讓人困惑的環(huán)境配置目錄. 這個(gè)框架提供了一種非常簡(jiǎn)單的管理環(huán)境配置的方式. 在 Laravel 5.0 中檢測(cè)和區(qū)分不同的運(yùn)行環(huán)境變得輕而易舉. 了解更多詳情, 請(qǐng)?jiān)L問(wèn)完整的配置文檔.

Laravel Elixir

由 Jeffrey Way 提供的 Laravel Elixir 提供了簡(jiǎn)明易懂的合并, 編譯資源文件的接口. 如果你曾經(jīng)對(duì)配置 Grunt 或者 Gulp 感到很頭大, 那么現(xiàn)在你得到解放了. Elixir 讓你可以輕松地借助 Gulp 來(lái)編譯你的 Less, Sass 和 CoffeeScript 文件. 它甚至可以替你執(zhí)行測(cè)試.

了解 Elixir 的更多詳情, 請(qǐng)?jiān)L問(wèn)完整文檔.

Laravel Socialite

Laravel Socialite 只兼容 Laravel 5.0 以上版本的可選包, 它提供了完整而且上手毫無(wú)難度的 OAuth 解決方案. 目前, Socialite 支持 Facebook, Twitter, Google 和 Github. 它看起來(lái)是這個(gè)樣子的:

復(fù)制代碼 代碼如下:

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

所以你不用再耗費(fèi)大量的時(shí)間來(lái)編寫(xiě) OAuth 認(rèn)證流程, 分分鐘輕松搞定. 完整文檔 包含有關(guān)這個(gè)可選包的全部細(xì)節(jié).

Flysystem 集成

新版 Laravel 還包含了強(qiáng)大的 Flysystem 文件處理靜態(tài)庫(kù). 通過(guò)這個(gè)庫(kù), 開(kāi)發(fā)者可以輕易上手, 使用完全一致的 API 來(lái)實(shí)現(xiàn)本地, Amazon S3 或者 Rackspace 進(jìn)行文件存儲(chǔ). 比如, 在 Amazon S3 存儲(chǔ)一個(gè)文件, 可以簡(jiǎn)單到這樣:

復(fù)制代碼 代碼如下:

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

了解有關(guān) Laravel Flysystem 集成的更多細(xì)節(jié), 可以查看它的完整文檔

表單請(qǐng)求

Laravel 5.0 帶來(lái)了全新的 form requests, 它擴(kuò)展自 Illuminate\Foundation\Http\FormRequest 類(lèi). 這些請(qǐng)求對(duì)象可以和控制器方法注入相結(jié)合, 提供一種全新的驗(yàn)證用戶(hù)輸入的方法. 簡(jiǎn)單舉一個(gè) FormRequest 的示例:

復(fù)制代碼 代碼如下:

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;
    }
 
}

定義好對(duì)應(yīng)的 FormRequest 擴(kuò)展類(lèi)之后, 在控制器方法中可以獲得類(lèi)型提示:
復(fù)制代碼 代碼如下:

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

當(dāng) Laravel 的 IoC container 識(shí)別到方法變量的類(lèi)型時(shí), 它會(huì)自動(dòng)注入 FormRequest 的實(shí)例, 于是這個(gè)請(qǐng)求會(huì)被 自動(dòng)驗(yàn)證. 這意味著當(dāng)你的控制器被調(diào)用時(shí), 你可以安全地使用該請(qǐng)求中包含的輸入數(shù)據(jù), 因?yàn)樗麄円呀?jīng)被你在表單請(qǐng)求類(lèi)中指定的規(guī)則進(jìn)行過(guò)驗(yàn)證了. 不僅如此, 如果該請(qǐng)求驗(yàn)證失敗, 系統(tǒng)還會(huì)自動(dòng)重定向到你預(yù)定義好的路由, 并且包含有錯(cuò)誤提示的信息(根據(jù)需要寫(xiě)入session, 或者轉(zhuǎn)換為 JSON 格式.) 表單驗(yàn)證從未如此簡(jiǎn)單過(guò). 了解有關(guān) FormRequest 驗(yàn)證的更多細(xì)節(jié), 請(qǐng)查閱文檔.

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

Laravel 5.0 的控制器基類(lèi)還包含了一個(gè) ValidatesRequests 的 trait. 該 trait 提供了簡(jiǎn)單的 validate 方法, 用于驗(yàn)證請(qǐng)求. 如果 FormRequests 對(duì)于你的應(yīng)用來(lái)說(shuō)太重了, 那你就可以用這個(gè)輕量版的:

復(fù)制代碼 代碼如下:

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

如果驗(yàn)證失敗, 系統(tǒng)會(huì)拋出一個(gè)異常, 對(duì)應(yīng)的 HTTP 請(qǐng)求會(huì)被自動(dòng)發(fā)送給瀏覽器. 驗(yàn)證錯(cuò)誤也會(huì)同時(shí)寫(xiě)入 session. 如果請(qǐng)求是用 AJAX 方式發(fā)起, Larave 會(huì)自動(dòng)發(fā)送一個(gè) JSON 形式的驗(yàn)證錯(cuò)誤信息.

了解有關(guān) FormRequest 驗(yàn)證的更多細(xì)節(jié), 請(qǐng)查閱文檔.

全新的生成器

為了方便生成新的默認(rèn)應(yīng)用結(jié)構(gòu), 全新的 Artisan 生成命令已經(jīng)被添加到框架中. 你可以通過(guò) php artisan list 查看詳細(xì)命令.

配置緩存

通過(guò) config:cache 命令, 可以把所有的配置項(xiàng)寫(xiě)入一個(gè)緩存文件中.

Symfony VarDumper

用于輸出變量信息進(jìn)行調(diào)試的輔助方法 dd, 在新版本中進(jìn)行了升級(jí), 使用強(qiáng)大的 Symfony VarDumper. 它可以輸出帶有顏色高亮和數(shù)組折疊功能的調(diào)試信息. 你可以嘗試一下:

復(fù)制代碼 代碼如下:

dd([1, 2, 3]);

相關(guān)文章

最新評(píng)論