:-: 
Laravel 5.6 在 Laravel 5.5 的基礎上繼續進行優化,包括日志系統、單機任務調度、模型序列化優化、動態頻率限制、廣播頻道類、API 資源控制器生成、Eloquent 日期格式化優化、Blade 組件別名、Argon2 密碼哈希支持、引入 Collision 擴展包等等等等。此外,所有的前端腳手架代碼都已升級到 Bootstrap 4,Laravel 底層使用的 Symfony 組件都已升級到 Symfony ~4.0 版本。
Laravel 5.6 版本的發布恰逢 [Spark](https://spark.laravel.com/) 6.0 的發布,所以這也是自 Laravel Spark 發布以來第一次重大版本升級。Spark 6.0 為 Stripe 和 Braintree 引入了按座定價功能,以及本地化、Bootstrap 4、增強 UI 和 Stripe Elements 支持。
> 注:本文檔只是概述了框架大部分引人注目的重要升級,要了解詳細升級日志可以查看 GitHub 上到 change logs。
# 日志優化
Laravel 5.6 帶來了日志系統的重大升級,所有日志配置都存放在新的 `config/logging.php` 配置文件,你現在可以輕松構建發送日志消息到多個處理器的日志”堆棧”。例如,你可以發送所有 `debug` 級別消息到系統日志同時發送 `error` 級別消息到 Slack 以便團隊成員可以快速響應:
~~~
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['syslog', 'slack'],
],
],
~~~
此外,現在可以使用日志系統的新”tap”功能很輕松地自定義已存在的日志頻道。想要了解更多細節,請查看完整日志文檔。
# 單機任務調度
> 注:要使用這個新特性,必須使用 `memcached` 或 `redis` 緩存驅動作為應用默認緩存驅動。此外,所有服務器必須和同一個中心緩存服務器進行通信。
如果你的應用運行在多個服務器上,現在可以限定只在一臺機器上運行調度任務。例如,假設你有一個在每周五晚上生成新報告的調度任務,如果任務調度器運行在三個服務器上,這個調度任務就會在三臺機器上運行并生成同樣的報告三次,這樣很不優雅,甚至很糟糕!
要指定任務只在一臺機器上運行,可以在定義調度任務時使用 `onOneServer` 方法,第一臺獲取到任務的機器會給這個任務上一把原子級別的鎖來阻止其他服務器同時運行同一個任務:
~~~
$schedule->command('report:generate')
->fridays()
->at('17:00')
->onOneServer();
~~~
# 動態頻率限制
當我們在之前版本的路由群組中指定了頻率限制后,必須要硬編碼最大請求次數:
~~~
Route::middleware('auth:api', 'throttle:60,1')->group(function () {
Route::get('/user', function () {
//
});
});
~~~
在 Laravel 5.6 中,你可以基于認證用戶模型屬性指定一個動態的最大請求次數,如果 `User` 模型包含 `rate_limit` 屬性,可以將屬性名傳遞給 `throttle` 中間件,以便用于計算最大請求次數計數:
~~~
Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
Route::get('/user', function () {
//
});
});
~~~
# 廣播頻道類
如果你的應用消費多個不同的頻道,`routes/channels.php` 文件可能會變得很臃腫,所以,作為使用閉包來授權頻道的替代方案,你現在可以使用頻道類。要生成一個頻道類,可以使用 Artisan 命令 `make:channel`。該命令會將新生成的頻道類存放到 `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
{
/**
* Create a new channel instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Authenticate the user's access to the channel.
*
* @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 消費的資源控制器時,通常你會排除輸出 HTML 模板的路由,例如 `create` 和 `edit`,要生成不包含這些方法的資源控制器,可以在使用 Artisan 命令執行 `make:controller` 時使用 `--api` 開關:
`php artisan make:controller API/PhotoController --api`
# 模型序列化優化
在之前版本的 Laravel 中,隊列中的模型在反序列化后不會帶有完整的已加載關聯關系。在 Laravel 5.6 中,模型上已加載的關聯關系在隊列任務被處理時會自動進行重新加載。
# Eloquent 日期轉化
現在你可以單獨自定義 Eloquent 日期字段轉化格式了,開始之前,需要在轉化聲明中指定目標日期格式。指定好之后,該格式就會在模型序列化為數組/JSON時使用:
~~~
protected $casts = [
'birthday' => 'date:Y-m-d',
'joined_at' => 'datetime:Y-m-d H:00',
];
~~~
# Blade 組件別名
如果你的 Blade 組件存放在子目錄中,現在起可以為它們起個別名以便使用。例如,假設一個 Blade 組件存放在 `resources/views/components/alert.blade.php`,你可以使用 `component` 方法將這個組件名從 `components.alert` 改為別名 `alert`:
`Blade::component('components.alert', 'alert');`
組件起了別名之后,就可以使用別名來渲染:
~~~
@component('alert')
You are not allowed to access this resource!
@endcomponent
~~~
或者,如果組件沒有額外插槽,可以使用組件別名作為 Blade 指令:
~~~
@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` 應用現在為 `Collision` 包含了一個 `dev` Composer 依賴,這個擴展包在通過命令行與 Laravel 應用交互時提供了美觀的錯誤報告:
:-: 
# Bootstrap 4
所有前端腳手架例如用戶登錄認證模板和 Vue 示例組件都已經升級到 `Bootstrap 4`。默認情況下,生成的分頁鏈接現在也已升級到 `Bootstrap 4`。
- 序言
- 新版特性
- 快速入門
- 升級指南
- 貢獻指南
- API文檔
- 安裝配置
- 目錄結構
- Homestead
- Valet
- 部署
- 核心概念
- 請求生命周期
- 服務容器
- 服務提供者
- 門面(Facades)
- 契約(Contracts)
- 框架基礎
- 路由
- 中間件
- CSRF 保護
- 控制器
- 請求
- 響應
- 視圖
- 生成 URL
- Session
- 驗證
- 錯誤處理
- 日志
- 前端開發
- Blade 模板
- 本地化
- 前端腳手架
- 編譯前端資源(Laravel Mix)
- 安全系列
- 登錄認證
- API 認證
- 授權
- 加密
- 哈希
- 重置密碼
- 進階系列
- Artisan 控制臺
- 集合
- 廣播
- 緩存
- 事件
- 文件存儲
- 輔助函數
- 郵件
- 通知
- 擴展包開發
- 隊列
- 任務調度
- 數據庫操作
- 快速入門
- 查詢構建器
- 分頁
- 遷移
- 數據填充
- Redis
- Eloquent ORM
- 快速入門
- 關聯關系
- 集合
- 訪問器 & 修改器
- API 資源類
- 序列化
- 應用測試
- 快速入門
- HTTP 測試
- 瀏覽器測試
- 數據庫測試
- 模擬
- 官方擴展包
- Cashier(訂閱支付解決方案)
- Envoy(遠程操作解決方案)
- Horizon(隊列系統解決方案)
- Passport(API 認證解決方案)
- Scout(全文搜索解決方案)
- Socialite(第三方登錄解決方案)
- 相關下載
- Laravel 5.6 中文文檔離線版
- Laravel 5.6 一鍵安裝包