## Support Policy
Security fixes are always applied to the previous major version of Laravel. Currently, all security fixes and patches will be applied to both Laravel 5.x and Laravel 4.x.
When feasible, security fixes will also be applied to even older releases of the framework, such as Laravel 3.x.
## Laravel 5.0
Laravel 5.0 在默認的項目上引進了新的應用程序架構。新的架構提供了更好的功能來構建健壯的 Laravel 應用程序,以及在應用程序中全面采用新的自動加載標準( `PSR-4` )。首先,來查看一些主要變更:
#### 新的目錄結構
舊的 `app/models` 目錄已經完全被移除。相對的,你所有的代碼都放在 `app` 目錄下,以及默認使用 App 命名空間。這個默認的命名空間可以使用新的 `app:name Artisan` 命令來快速更改。
控制器( `controller` ),中間件( `middleware` ),以及請求( `requests`,Laravel 5.0 中新型態的類別),現在都存放在 app/Http 的對應目錄下,因為他們都與應用程序的 `HTTP` 傳輸層相關。除了一個路由設置的文件外,所有的中間件現在都拆分開成單獨的類文件。
新的 `app/Providers` 目錄取代了舊版 Laravel 4.x app/start 里的文件。這些服務提供者有很多啟動應用程序相關的方法,像是錯誤處理,日志記錄,路由加載,以及更多。當然,你可以自由的建立新的服務提供者到應用程序。
應用程序的語言文件和視圖都移到 `resources` 目錄下。
#### Contracts
所有 Laravel 主要組件實現所用的接口都放在 illuminate/contracts 項目下。這個項目沒有其他的外部依賴。這些方便、集成的接口,可以讓你用來讓依賴注入變得低耦合,將可以簡單作為 Laravel Facades 的替代選項。
更多關于 contracts 的信息,參考完整文檔。
#### 路由緩存
如果你的應用程序全部都是使用控制器路由,你可以使用新的 `route:cache` Artisan 命令大幅度地加快路由注冊。這對于有 100 個以上路由規則的應用程序很有用,可以大幅度地加快應用程序這部分的處理速度。
#### 路由中間件( Middleware )
除了像 Laravel 4 風格的路由「過濾器( `filters` )」,Laravel 5 現在也支持 HTTP 中間件,而原本的認證和 `CSRF` 「過濾器」已經改寫成中間件。中間件提供了單一、一致的接口取代了各種過濾器,讓你在請求進到應用程序前,可以方便地檢查甚至拒絕請求。
更多關于中間件的信息,參考完整文檔。
#### 控制器方法依賴注入
除了之前有的控制器依賴注入,你現在可以在控制器方法使用類型提示( `type-hint` )進行依賴注入。服務容器會自動注入依賴,即使路由包含了其他參數也不成問題:
~~~
public function createPost(Request $request, PostRepository $posts)
{
//
}
~~~
#### 認證基本架構
用戶注冊,認證,以及重設密碼的控制器現在已經默認含括了,包含相對應的視圖,放在 `resources/views/auth`。除此之外, 「users」 數據表遷移也已經默認存在框架中了。這些簡單的資源,可以讓你快速開發應用程序的業務邏輯,而不用陷在撰寫認證模板的泥潭上。認證相關的視圖可以經由 `auth/login` 以及 auth/register 路由訪問。`App\Services\Auth\Registrar` 服務會負責處理用戶認證和添加的相關邏輯。
#### 事件對象
你現在可以將事件定義成對象,而不是僅使用字串。例如,查看以下的事件:
~~~
class PodcastWasPurchased {
public $podcast;
public function __construct(Podcast $podcast)
{
$this->podcast = $podcast;
}
}
~~~
這個事件可以像一般使用那樣被派發:
~~~
Event::fire(new PodcastWasPurchased($podcast));
~~~
當然,你的事件處理會收到事件的對象而不是數據的列表:
~~~
class ReportPodcastPurchase {
public function handle(PodcastWasPurchased $event)
{
//
}
}
~~~
更多關于使用事件的信息,參考完整文檔。
#### 命令( Commands )、隊列( Queueing )
除了 Laravel 4 形式的隊列任務,Laravel 5 以簡單的命令對象作為隊列任務。這些命令放在 `app/Commands` 目錄下。下面是個簡單的命令:
~~~
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`,讓你可以簡單的派發命令執行。
~~~
$this->dispatch(new PurchasePodcastCommand($user, $podcast));
~~~
當然,你也可以將命令視為同步執行(而不會被放到隊列里)的任務。事實上,使用命令是個好方式,讓你可以封裝應用程序需要執行的復雜任務。更多相關的信息,參考 `command bus` 文檔。
#### 數據庫隊列
`database` 隊列驅動現在已經包含在 Laravel 中了,提供了簡單的本地端隊列驅動,讓你除了數據庫相關軟件外不需安裝其他套件。
Laravel 調用( `Scheduler` )
過去,開發者可以產生 Cron 設置,用以調用所有他們想要執行的命令行指令。然而,這是件很頭痛的事情,你的命令行調用不再屬于版本控制的一部分,而你必須 SSH 到服務器里加入 Cron 設置。
為了讓生活變得簡單點, 讓你可以流暢而且具有表達性的在 Laravel 里面定義你的命令調用,而且服務器只需要單一個 Cron 設置。
它會看起來如下:
~~~
$schedule->command('artisan:command')->dailyAt('15:00');
~~~
當然,快參考完整文檔學習所有調用相關知識。
#### Tinker、Psysh
`php artisan tinker` 命令現在使用 Justin Hileman 的 Psysh,一個 PHP 更強大的 `REPL`。如果你喜歡 Laravel 4 的 `Boris`,你也會喜歡上 `Psysh`。更好的是,它可以跑在 `Windows`!要開始使用,只要輸入:
~~~
php artisan tinker
~~~
#### DotEnv
比起一堆令人困惑的、嵌套的環境配置文件目錄,Laravel 5 現在使用了 `Vance Lucas` 的 DotEnv。這個套件提供了超級簡單的方式管理配置文件,并且讓 Laravel 5 環境檢測變得輕松。更多的細節,參考完整的配置文件文檔。
#### Laravel Elixir
Jeffrey Way 的 `Laravel Elixir` 提供了一個流暢、語義化的接口,可以編譯以及合并 `assets`。如果你曾經在學習 `Grunt` 或 `Gulp` 被嚇到,不必再害怕了。Elixir 讓使用 Gulp 編譯 Less、Sass 及 CoffeeScript 變得簡單。它甚至可以幫你執行測試!
更多關于 Elixir 的信息,參考完整文檔。
#### Laravel Socialite
Laravel Socialite 是個可選的,Laravel 5.0 以上兼容的套件,提供了無痛的 OAuth 認證。目前 `Socialite` 支持 `Facebook`、`Twitter`、`Google` 以及 `GitHub`。它寫起來可能像這樣:
~~~
public function redirectForAuth()
{
return Socialize::with('twitter')->redirect();
}
public function getUserFromProvider()
{
$user = Socialize::with('twitter')->user();
}
~~~
不用再花上數小時撰寫 `OAuth` 的認證流程。數分鐘就可開始!查看完整文檔 里有所有的細節。
#### Flysystem 集成
Laravel 現在包含了強大的 Flysystem(一個文件系統的抽象類庫),提供了無痛的集成,把本地端文件系統、Amazon S3 和 Rackspace 云存儲集成在一起, 有統一且優雅的 API!現在要將文件存到 Amazon S3 相當簡單:
~~~
Storage::put('file.txt', 'contents');
~~~
更多關于 Laravel 文件系統集成,參考完整文檔。
#### Form Requests
Laravel 5.0 使用了 form requests,是繼承了 `Illuminate\Foundation\Http\FormRequest` 的類。這些 request 對象可以和控制器方法依賴注入結合,提供一個不需樣板的方法,可以驗證用戶輸入。讓我們深入點,看一個 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;
}
}
~~~
定義好類后,我們可以在控制器動作里使用類型提示:
~~~
public function register(RegisterRequest $request)
{
var_dump($request->input());
}
~~~
當 Laravel 的服務容器辨別出要注入的類別是個 `FormRequest` 實例,請求會被自動驗證。意味著,當你的控制器動作被調用了,你可以安全的假設 HTTP 的請求輸入己經被驗證過,根據你在 form request 類別里自定的規則。甚至,若這個請求驗證不通過,一個 HTTP 重定向(可以自定),會自動發出,錯誤消息可以被閃存到 session 或是轉換成 JSON 返回。表單驗證就是如此的簡單。更多關于 FormRequest 驗證,參考文檔。
#### 簡易控制器請求驗證
Laravel 5 基類控制器包含一個 `ValidatesRequests trait`。這個 trait 包含了一個簡單的 validate 方法可以驗證請求。如果對應用程序來說 FormRequests 太復雜了,參考這個:
~~~
public function createPost(Request $request)
{
$this->validate($request, [
'title' => 'required|max:255',
'body' => 'required',
]);
}
~~~
如果驗證失敗,會拋出異常并且返回對應的 HTTP 回應到瀏覽器。驗證錯誤信息會被閃存到 session!而如果請求是 AJAX 請求,Laravel 會自動返回 JSON 格式的驗證錯誤信息。
更多關于這個新方法的信息,參考這個文檔。
#### 新的 Generators
因采用了新的應用程序默認架構,框架也添加了 Artisan generator 命令。使用 `php artisan list` 查看更多細節。
#### 配置文件緩存
你現在可以在單一文件里緩存所有配置文件了,使用 `config:cache` 命令。
~~~
Symfony VarDumper
~~~
常用的 dd 輔助函數,其可以在除錯時印出變量信息,已經升級成使用令人驚艷的 `Symfony VarDumper`。它提供了顏色標記的輸出,甚至數組可以自動縮合。在項目中試試下列代碼:
~~~
dd([1, 2, 3]);
~~~
## Laravel 4.2
此發行版本的完整變更列表可以從一個 4.2 的完整安裝下,執行 `php artisan changes` 命令,或者 Github 上的變更紀錄。此紀錄僅含括主要的強化更新和此發行的變更部分。
> 附注: 在 4.2 發布周期間,許多小的 bug 修正與功能強化被整并至各個 4.1 的子發行版本中。所以最好確認 Laravel 4.1 版本的更新列表。
#### PHP 5.4 需求
Laravel 4.2 需要 PHP 5.4 以上的版本。此 PHP 更新版本讓我們可以使用 PHP 的新功能:traits 來為像是 Laravel 收銀臺 來提供更具表達力的接口。PHP 5.4 也比 PHP 5.3 帶來顯著的速度及性能提升。
#### Laravel Forge
Larvel Forge,一個網頁應用程序,提供一個簡單的接口去建立管理你云端上的 PHP 服務器,像是 Linode、DigitalOcean、Rackspace 和 Amazon EC2。支持自動化 nginx 設置、SSH 密鑰管理、Cron job 自動化、透過 NewRelic & Papertrail 服務器監控、「推送部署」、Laravel queue worker 設置等等。Forge 提供最簡單且更實惠的方式來部署所有你的 Laravel 應用程序。
默認 Laravel 4.2 的安裝里,app/config/database.php 配置文件默認已為 Forge 設置完成,讓在平臺上的全新應用程序更方便部署。
關于 Laravel Forge 的更多信息可以在官方 Forge 網站上找到。
#### Laravel Homestead
Laravel Homestead 是一個為部署健全的 Laravel 和 PHP 應用程序的官方 Vagrant 環境。絕大多數的封裝包的相依與軟件在發布前已經部署處理完成,讓封裝包可以極快的被啟用。Homestead 包含 Nginx 1.6、PHP 5.5.12、MySQL、Postres、Redis、Memcached、Beanstalk、Node、Gulp、Grunt 和 Bower。Homestead 包含一個簡單的 Homestead.yaml 配置文件,讓你在單一個封裝包中管理多個 Laravel 應用程序。
默認的 Laravel 4.2 安裝中包含的 app/config/local/database.php 配置文件使用 Homestead 的數據庫作為默認。讓 Laravel 初始化安裝與設置更為方便。
官方文檔已經更新并包含在 Homestead 文檔 中。
#### Laravel 收銀臺
Laravel 收銀臺是一個簡單、具表達性的資源庫,用來管理 Stripe 的訂閱帳務。雖然在安裝中此組件依然是選用,我們依然將收銀臺文檔包含在主要 Laravel 文檔中。此收銀臺發布版本帶來了數個錯誤修正、多貨幣支持還有支持最新的 Stripe API。
#### Queue Workers 常駐程序
Artisan queue:work 命令現在支持 --daemon 參數讓 worker 可以以「常駐程序」啟用。代表 worker 可以持續的處理隊列工作不需要重啟框架。這讓一個復雜的應用程序部署過程中,使得 CPU 的使用有顯著的降低。
更多關于 Queue Workers 常駐程序信息請詳閱 queue 文檔。
#### Mail API Drivers
Laravel 4.2 為 Mail 函式采用了新的 `Mailgun` 和 `Mandrill API` 驅動。對許多應用程序而言,他提供了比 SMTP 更快也更可靠的方法來遞送郵件。新的驅動使用了 `Guzzle 4 HTTP` 資源庫。
#### 軟刪除 Traits
對于軟刪除和全作用域更簡潔的方案 PHP 5.4 的 `traits` 提供了一個更加簡潔的軟刪除架構和全局作用域,這些新架構為框架提供了更有擴展性的功能,并且讓框架更加簡潔。
更多關于軟刪除的文檔請見: Eloquent documentation.
#### 更為方便的 認證(auth) & Remindable Traits
得益于 `PHP 5.4 traits`,我們有了一個更簡潔的用戶認證和密碼提醒接口,這也讓 `User` 模型文檔更加精簡。
#### "簡易分頁"
一個新的 `simplePaginate` 方法已被加入到查找以及 Eloquent 查找器中。讓你在分頁視圖中,使用簡單的「上一頁」和「下一頁」鏈接查找更為高效。
#### 遷移確認
在正式環境中,破壞性的遷移動作將會被再次確認。如果希望取消提示字符確認請使用 `--force` 參數。
## Laravel 4.1
完整變更列表
此發行版本的完整變更列表,可以在版本 4.1 的安裝中命令行執行 `php artisan changes` 取得,或者瀏覽 Github 變更檔 中了解。其中只記錄了該版本比較主要的強化功能和變更。
#### 新的 SSH 組件
一個全新的 SSH 組件在此發行版本中登場。此功能讓你可以輕易的 SSH 至遠程服務器并執行命令。更多信息,可以參閱 SSH 組件文檔。
新的 `php artisan tail` 指令就是使用這個新的 SSH 組件。更多的信息,請參閱 tail 指令集文檔。
#### Boris In Tinker
如果您的系統支持 `Boris REPL`,`php artisan thinker` 指令將會使用到它。系統中也必須先行安裝好 `readline` 和 `pcntl` 兩個 PHP 套件。如果你沒這些套件,從 4.0 之后將會使用到它。
#### Eloquent 強化
Eloquent 添加了新的 `hasManyThrough` 關系鏈。想要了解更多,請參見 Eloquent 文檔。
一個新的 whereHas 方法也同時登場,他將允許檢索基于關系模型的約束。
#### 數據庫讀寫分離
`Query Builder` 和 `Eloquent` 目前透過數據庫層,已經可以自動做到讀寫分離。更多的信息,請參考 文檔。
#### 隊列排序
隊列排序已經被支持,只要在 `queue:listen` 命令后將隊列以逗號分隔送出。
#### 失敗隊列作業處理
現在隊列將會自動處理失敗的作業,只要在 `queue:listen` 后加上 `--tries` 即可。更多的失敗作業處理可以參見 隊列文檔。
#### 緩存標簽
緩存「區塊」已經被「標簽」取代。緩存標簽允許你將多個「標簽」指向同一個緩存對象,而且可以清空所有被指定某個標簽的所有對象。更多使用緩存標簽信息請見 緩存文檔。
#### 更具彈性的密碼提醒
密碼提醒引擎已經可以提供更強大的開發彈性,如:認證密碼、顯示狀態消息等等。使用強化的密碼提醒引擎,更多的信息 請參閱文檔。
#### 強化路由引擎
Laravel 4.1 擁有一個完全重新編寫的路由層。API 一樣不變。然而與 4.0 相比,速度快上 100%。整個引擎大幅的簡化,且對于路由表達式的編譯大大減少對 `Symfony Routing` 的依賴。
#### 強化 Session 引擎
此發行版本中,我們亦發布了全新的 Session 引擎。如同路由增進的部分,新的 Session 曾更加簡化且更快速。我們不再使用 Symfony 的 Session 處理工具,并且使用更簡單、更容易維護的客制化解法。
#### Doctrine DBAL
如果你有在你的遷移中使用到 `renameColumn`,之后你必須在 composer.json 里加 `doctrine/dbal` 進相依套件中。此套件不再默認包含在 Laravel 之中。
- 前言
- 發行說明/L5新特性
- 升級向導
- 升級到 5.0.16
- 從 4.2 升級到 5.0
- 從 4.1 升級到 4.2
- 從 4.1.x 升級到 4.1.29
- 從 4.1.25 升級到 4.1.26
- 從 4.0 升級到 4.1
- 貢獻向導
- 環境配置
- 安裝
- 配置
- 基本功能
- 路由
- 基本路由
- CSRF 保護
- 方法欺騙
- 路由參數
- 命名路由
- 路由群組
- 路由模型綁定
- 拋出 404 錯誤
- 中間件
- 建立中間件
- 注冊中間件
- 可終止中間件
- 控制器
- 基礎控制器
- 控制器中間件
- 隱式控制器
- RESTful 資源控制器
- 請求
- 取得請求實例
- 取得輸入數據
- 舊輸入數據
- Cookies
- 上傳文件
- 其他的請求信息
- 響應
- 基本響應
- 重定向
- 其他響應
- 響應宏
- 系統架構
- 服務提供者
- 基本提供者例子
- 注冊提供者
- 緩載提供者
- 服務容器
- 基本用法
- 將接口綁定到實現
- 上下文綁定
- 標簽
- 實際應用
- 容器事件
- 參考:理解PHP 依賴注入|Laravel IoC容器
- Contracts
- 為什么用 Contracts
- Contract 參考
- 如何使用 Contracts
- Facades
- 實際用法
- 建立 Facades
- 模擬 Facades
- Facade 類參考
- 請求的生命周期
- 生命周期概要
- 聚焦于服務提供者
- 應用程序結構
- 根目錄
- App 目錄
- 為應用程序配置命名空間
- 系統服務
- 認證
- 用戶認證
- 取得經過認證的用戶
- 保護路由
- HTTP 基本認證
- 忘記密碼與重設
- 第三方登陸認證
- 交易
- 配置文件
- 訂購方案
- 一次性付款
- Single Charges
- 免信用卡試用
- 訂購轉換
- 訂購數量
- 取消訂購
- 恢復訂購
- 確認訂購狀態
- 處理失敗訂閱
- 處理其它 Stripe Webhooks
- 收據
- 緩存
- 配置
- 緩存用法
- 遞增與遞減
- 緩存標簽
- 緩存事件
- 數據庫緩存
- 集合
- Command Bus
- 建立命令
- 調用命令
- 命令隊列
- 命令管道
- 核心擴展
- 管理者和工廠
- 緩存
- Session
- 認證
- 基于服務容器的擴展
- Laravel Elixir
- 安裝與配置
- 使用方式
- Gulp
- Custom Tasks and Extensions
- 加密
- Envoy 任務執行器
- 安裝
- 執行任務
- 多服務器
- 并行執行
- 任務宏
- 通知
- 更新 Envoy
- 錯誤與日志
- 配置
- 錯誤處理
- HTTP 異常
- 日志
- 事件
- 基本用法
- 事件處理隊列
- 事件訂閱者
- 文件系統與云存儲
- 配置文件
- 基本用法
- 自定義文件系統
- 哈希
- 基本用法
- 輔助方法
- 數組
- 路徑
- 路由
- 字符串
- 網址(URL)
- 其他
- 本地化
- 語言文件
- 基本用法
- 復數
- 驗證
- 覆寫擴展包的語言文件
- 郵件
- 配置
- 基本用法
- 內嵌附件
- 郵件隊列
- 郵件與本地端開發
- 擴展包開發
- 視圖
- 語言
- 配置文件
- 公共資源
- 發布分類文件
- 路由
- 分頁
- 配置
- 使用
- 追加分頁鏈接
- 轉換至 JSON
- 隊列
- 設置
- 基本用法
- 隊列閉包
- 執行一個隊列監聽
- 常駐隊列處理器
- 推送隊列
- 已失敗的工作
- 會話
- 配置
- 使用 Session
- 暫存數據(Flash Data)
- 數據庫 Sessions
- Session 驅動
- 模板
- Blade 模板
- Blade 控制語法結構
- Blade 擴展
- 參考:@section與@yield 介紹
- 單元測試
- 定義并執行測試
- 測試環境
- 從測試調用路由
- 模擬 Facades
- 框架 Assertions
- 輔助方法
- 重置應用程序
- 表單驗證
- 基本用法
- 控制器驗證
- 表單請求驗證
- 使用錯誤信息
- 錯誤信息 & 視圖
- 可用驗證規則
- 條件驗證規則
- 自定義錯誤信息
- 自定義驗證規則
- 數據庫
- 使用基礎
- 配置
- 讀取/寫入連接
- 執行查找
- 數據庫事務處理
- 獲取連接
- 日志記錄
- 查詢構造器
- Selects
- Joins
- 高級 Wheres
- 聚合
- 原生表達式
- 添加
- 更新
- 刪除
- Unions
- 悲觀鎖定 (Pessimistic Locking)
- Eloquent ORM
- 基本用法
- 批量賦值
- 新增,更新,刪除
- 軟刪除
- 時間戳
- 范圍查詢
- Global Scopes
- 關聯
- 關聯查詢
- 預載入
- 新增關聯模型
- 更新上層時間戳
- 使用樞紐表
- 集合
- 獲取器和修改器
- 日期轉換器
- 屬性類型轉換
- 模型事件
- 模型觀察者
- 模型 URL 生成
- 轉換成數組 / JSON
- 結構生成器
- 建立與刪除數據表
- 加入字段
- 修改字段
- 修改字段名稱
- 移除字段
- 檢查是否存在
- 加入索引
- 外鍵
- 移除索引
- 移除時間戳記和軟刪除
- 保存引擎
- 遷移和數據填充
- 建立遷移文件
- 執行遷移
- 回滾遷移
- 數據填充
- Redis
- 配置
- 使用方式
- 管道
- 開發包
- Confide 用戶身份認證
- Entrust 權限管理
- Shoppingcart 購物車
- Genertators 代碼生成工具
- IDE Helper IDE助手
- Artisan 命令行工具
- 概覽
- 用法
- 在命令行接口以外的地方調用命令
- 定時調用 Artisan 命令
- 開發
- 建立自定義命令
- 注冊自定義命令