* * * * *
[TOC]
## 版本控制方案
Laravel 的版本控制方案使用以下約定:`主版本號.次版本號.修訂號`。次版本號框架每六個月(二月和八月)發布,而修訂號版本可能每周發布一次,而修訂號版本**不**包含重大更改。
你從應用程序中或在包中引用 Laravel 框架或其他組件時,應該始終使用版本約束,例如?`5.5.*`,因為 Laravel 的次要版本包含重大更改。但是,我們會努力確保你可以在一天或更短時間內完成更新。
主版本之間的發布往往需要很多年,每次發布代表框架架構和底層結構發生了根本的改變。而目前并沒有準備開發主版本號的計劃。
## 支持策略
對于 LTS 版本,例如 Laravel 5.1,提供兩年的錯誤修復和三年的安全修復。這些版本提供最長時間的支持和維護。對于一般版本,則只是提供六個月的錯誤修復和為期一年的安全修復。
## Laravel 5.6
Laravel 5.6 繼續在 Laravel 5.5 的基礎上進行持續改進,改進有添加了一個改良的日志系統,單機任務調度系統,對模型序列化進行改進,動態的速率限制,廣播頻道類添加,可生成 API 資源控制器,Eloquent 日期格式改進,Blade 組件別名,Argon2 密碼哈希支持,加入 Collision 包,以及更多。除此之外全部前端腳手架已經升級為 Bootstrap 4。
所有 Laravel 使用的 Symfony 組件已經升級到 Symfony?`~4.0`?release 系列。
此次發布 Laravel 5.6 的同時也發布了?[Spark 6.0](https://spark.laravel.com/),這是 Laravel Spark 的一次重大升級,Spark 6.0 為 Stripe 和 Braintree 引入了按座定價功能,以及本地化、Bootstrap 4、增強 UI 和 Stripe Elements 支持。
> {tip} 這個文檔總結了那些對框架來說最顯著和值得注意的改進;更加詳盡的改進可以查閱?[on GitHub](https://github.com/laravel/framework/blob/5.6/CHANGELOG-5.6.md).
### Logging 改進
Laravel 5.6 對日志系統做出了巨大的改進,所有日志的配置都放置在一個新的?`config/logging.php`?配置文件中,你可以輕松的構建日志「棧」然后發送日志消息到多個處理器,例如,你可以發送所有的?`debug`?級別的日志消息到系統日志,同時將?`error`?級別的日志消息發送到 Slack ,以便讓團隊成員更快速的對系統的錯誤做出反應:
~~~
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['syslog', 'slack'],
],
],
~~~
此外,使用日志系統的新「tap」功能,現在能更容易的自定義已存在的日志頻道,更多詳情可以查看?[完整的日志系統文檔](http://www.hmoore.net/tonyyu/laravel_5_6/786183).
### 單機任務調度
> {note} 要使用這個新特性,必須使用`memcached`?或?`redis`?緩存驅動作為你應用程序的默認緩存驅動。另外,所有的服務器必須與同一個中心緩存服務器通信。
如果你的應用程序運行在多個服務器上,現在你可以限定只在一臺機器上運行計劃任務。 例如,假設你有一個每周五晚上生成新報告的計劃任務。如果計劃任務是運行在三個服務器上,這個計劃任務就會運行在三個服務器上并生成同樣的報告三次,這樣非常糟糕!
為了讓計劃任務只運行在一個服務器上,可以在定義計劃任務時使用?`onOneServer`?方法。 第一個服務器獲得任務將會給任務添加一個原子鎖,阻止其他的服務器在相同的計劃周期運行同樣的計劃任務:
~~~
$schedule->command('report:generate')
->fridays()
->at('17:00')
->onOneServer();
~~~
### 動態頻率限制
在之前的 Laravel 版本的路由群組中指定?[頻率限制](http://www.hmoore.net/tonyyu/laravel_5_6/786088#_358)?后,必須要硬編碼最大請求次數:
~~~
Route::middleware('auth:api', 'throttle:60,1')->group(function () {
Route::get('/user', function () {
//
});
});
~~~
在 Laravel 5.6 中,你可以基于認證?`User`?模型屬性指定一個動態的最大請求次數。例如,如果你的?`User`?模型包含?`rate_limit`?屬性,可以將屬性名傳遞給?`throttle`?中間件,以便用于計算最大請求次數計數:
~~~
Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
Route::get('/user', function () {
//
});
});
~~~
### 廣播頻道類
如果你的應用正在消費多個頻道,那么你的?`routes/channels.php`?將會越來越臃腫。所以你可以使用頻道類代替閉包來授權頻道。可以使用?`make:channel`?Artisan 命令來創建頻道類。這個命令會將新創建的類放到?`App/Broadcasting`?目錄中。
~~~
php artisan make:channel OrderChannel
~~~
然后在?`routes/channels.php`?中注冊你的頻道:
~~~
use App\Broadcasting\OrderChannel;
Broadcast::channel('order.{order}', OrderChannel::class);
~~~
最后,你可以在你的頻道類?`join`?方法中寫授權邏輯。`join`?方法的邏輯與你之前在頻道授權閉包中的邏輯是一樣的。當然,同時你可以利用頻道模型綁定這種便利的功能:
~~~
<?php
namespace App\Broadcasting;
use App\User;
use App\Order;
class OrderChannel
{
/**
* 創建一個頻道實例
*
* @return void
*/
public function __construct()
{
//
}
/**
* 授權用戶在頻道上的操作。
*
* @param \App\User $user
* @param \App\Order $order
* @return array|bool
*/
public function join(User $user, Order $order)
{
return $user->id === $order->user_id;
}
}
~~~
### 生成 API 控制器
當你想為 API 生成控制器時,你會希望生成的控制器類里不包含?`create`?和?`edit`?方法,因為他們在資源控制器的定義里,是返回 HTML 內容的。在 Laravel 新版本里,你只需要在執行?`make:controller`?時指定參數?`--api`?即可移除這兩個方法:
~~~
php artisan make:controller API/PhotoController --api
~~~
### Model 模型序列化增強
在之前的版本中,當在隊列中使用模型數據時,模型關聯的數據是不會被直接加載的。在 Laravel 5.6 里,只要你請求隊列時提前加載了模型關聯數據,在隊列執行時,這些關聯數據會被自動加載。
### Eloquent 日期格式指定
現在你可以為 Eloquent 的日期字段指定專屬的?**日期格式**?了。字段指定日期格式以后,序列號 / JSON 都會返回格式化后的數據:
~~~
protected $casts = [
'birthday' => 'date:Y-m-d',
'joined_at' => 'datetime:Y-m-d H:00',
];
~~~
### Blade 組件別名
如果你的 Blade 組件存儲在子目錄中,現在可以給它們起一個別名以方便訪問。例如,想象存儲在?`resources/views/components/alert.blade.php`?目錄下的Blade 組件, 你可以使用?`component`?方法將`components.alert`?組件別名為?`alert`:
~~~
Blade::component('components.alert', 'alert');
~~~
一旦組件被別名,你可以使用一個指令來渲染它:
~~~
@alert('alert', ['type' => 'danger'])
You are not allowed to access this resource!
@endalert
~~~
如果沒有附加插槽,您可以省略組件參數:
~~~
@alert
You are not allowed to access this resource!
@endalert
~~~
### Argon2 密碼散列
如果您正在 PHP 7.2.0 或更高版本上構建應用程序,Laravel 現在通過Argon2 算法支持密碼哈希。 應用程序的默認散列驅動程序由一個新的`config/hashing.php`?配置文件控制。
### UUID 方法
Laravel 5.6 引入了兩種用于生成 UUID 的新方法:`Str::uuid`?和?`Str::orderedUuid`。?`orderedUuid`?方法將生成一個時間戳的第一個 UUID,它可以通過 MySQL 等數據庫更容易和有效地索引。 每個方法都會返回一個?`Ramsey\Uuid\Uuid`?對象 :
~~~
use Illuminate\Support\Str;
return (string) Str::uuid();
return (string) Str::orderedUuid();
~~~
### Collision
現在,默認的?`laravel/laravel`?應用包含了由 Nuno Maduro 維護的?[Collision](https://github.com/nunomaduro/collision)?的?`dev`?Composer 第三方依賴包,當我們在命令行中與 Laravel 應用進行交互時,它會提供美觀的錯誤報告信息:
[](https://raw.githubusercontent.com/nunomaduro/collision/stable/docs/example.png)
[](https://raw.githubusercontent.com/nunomaduro/collision/stable/docs/example.png)
### Bootstrap 4
所有的前端腳手架,例如身份驗證樣板文件和示例 Vue 組件都已經升級到了
[Bootstrap 4](https://blog.getbootstrap.com/2018/01/18/bootstrap-4/)。默認情況下,分頁鏈接生成的樣式也默認采用了 Bootstrap 4。
- 前言
- 翻譯說明
- 發行說明
- 升級指南
- 貢獻導引
- 入門指南
- 安裝
- 配置信息
- 文件夾結構
- Homestead
- Valet
- 部署
- 核心架構
- 請求周期
- 服務容器
- 服務提供者
- Facades
- Contracts
- 基礎功能
- 路由
- 中間件
- CSRF 保護
- 控制器
- 請求
- 響應
- 視圖
- URL
- Session
- 表單驗證
- 錯誤
- 日志
- 前端開發
- Blade 模板
- 本地化
- 前端指南
- 編輯資源 Mix
- 安全相關
- 用戶認證
- Passport OAuth 認證
- 用戶授權
- 加密解密
- 哈希
- 重置密碼
- 綜合話題
- Artisan 命令行
- 廣播系統
- 緩存系統
- 集合
- 事件系統
- 文件存儲
- 輔助函數
- 郵件發送
- 消息通知
- 擴展包開發
- 隊列
- 任務調度
- 數據庫
- 快速入門
- 查詢構造器
- 分頁
- 數據庫遷移
- 數據填充
- Redis
- Eloquent ORM
- 快速入門
- 模型關聯
- Eloquent 集合
- 修改器
- API 資源
- 序列化
- 測試相關
- 快速入門
- HTTP 測試
- 瀏覽器測試 Dusk
- 數據庫測試
- 測試模擬器
- 官方擴展包
- Cashier 交易工具包
- Envoy 部署工具
- Horizon
- Scout 全文搜索
- Socialite 社會化登錄