鍍金池/ 教程/ PHP/ 升級指南
門面
Laravel Homestead
安裝及配置
測試
HTTP 中間件
加密
升級指南
幫助函數(shù)
應(yīng)用目錄結(jié)構(gòu)
集合
新手入門指南-簡單任務(wù)管理系統(tǒng)
任務(wù)調(diào)度
查詢構(gòu)建器
視圖
驗(yàn)證
Laravel Cashier(訂購&支付&發(fā)票)
本地化
隊(duì)列
調(diào)整器
分頁
文件系統(tǒng)/云存儲(chǔ)
貢獻(xiàn)代碼
哈希
HTTP 控制器
緩存
遷移
HTTP 請求
Laravel Elixir
發(fā)行版本說明
Envoy 任務(wù)運(yùn)行器(SSH任務(wù))
序列化
Session
起步
帶用戶功能的任務(wù)管理系統(tǒng)
起步
用戶授權(quán)
郵件
事件
填充數(shù)據(jù)
HTTP 路由
服務(wù)提供者
Blade 模板引擎
包開發(fā)
用戶認(rèn)證
Artisan 控制臺(tái)
HTTP 響應(yīng)
集合
服務(wù)容器
關(guān)聯(lián)關(guān)系
一次請求的生命周期
契約
Redis
錯(cuò)誤&日志

升級指南

更新到5.1.0

預(yù)計(jì)更新時(shí)間:小于1小時(shí)

更新 bootstrap/autoload.php

更新 bootstrap/autoload.php 中的變量 $compilePath:

$compiledPath = __DIR__.'/cache/compiled.php';

創(chuàng)建 bootstrap/cache 目錄

bootstrap 目錄中,創(chuàng)建 cache 目錄,在該目錄中創(chuàng)建一個(gè) .gitignore 文件,編輯文件內(nèi)容如下:

*!.gitignore

該目錄應(yīng)該是可寫的,用來存儲(chǔ)臨時(shí)優(yōu)化文件如 compiled.php,routes.php,config.php 以及 service.json

新增 BroadcastServiceProvider

在配置文件 config/app.php 中,添加 Illuminate\Broadcasting\BroadcastServiceProviderproviders 數(shù)組。

認(rèn)證

如果你在使用 Laravel 自帶的 AuthenticatesAndRegistersUsersAuthController,則需要對新用戶的驗(yàn)證和創(chuàng)建做一些代碼改動(dòng):

首先,你不再需要傳遞 GuardRegister 實(shí)例到構(gòu)造函數(shù),你可以從控制器的構(gòu)造器中完全移除這些以依賴。

然后,Laravel 5.0 中使用的 App\Services\Registrar 不再被需要,你可以直接簡單拷貝粘貼其中的 validator 方法和 create 方法到 AuthController 中,這兩個(gè)方法中的代碼不需要做任何改動(dòng)。不要忘記確認(rèn) ValidatorUserAuthController 中是否已經(jīng)被導(dǎo)入。

PasswordController 不再需要在構(gòu)造函數(shù)中聲明任何依賴,可以移除5.0中要求的兩個(gè)依賴。

驗(yàn)證

如果你重寫了 Controller 類中的 formatValidationErrors 方法,需要將類型提示由 Illuminate\Validation\Validator 改為 Illuminate\Contracts\Validation\Validator

Eloquent

create 方法

Eloquent 的 create 方法現(xiàn)在可以不傳入任何參數(shù)進(jìn)行調(diào)用,如果你在模型中要重寫 create 方法,將 $attributes 參數(shù)的默認(rèn)值改為數(shù)組:

public static function create(array $attributes = []){
    // Your custom implementation
}

find 方法

如果你要在自己的模型中重寫 find 方法并在其中調(diào)用 parent::find(),應(yīng)該改由調(diào)用 Eloquent 查詢構(gòu)建器的 find 方法:

public static function find($id, $columns = ['*']){
    $model = static::query()->find($id, $columns);

    // ...

    return $model;
}

lists 方法

lists 方法現(xiàn)在返回一個(gè) Collection 實(shí)例而不是包含 Eloquent 查詢結(jié)果的數(shù)組,如果你想將 Collection 轉(zhuǎn)化為數(shù)組,使用 all 方法:

User::lists('id')->all();

注意:Query Builder 的 lists 返回的仍然是數(shù)組。

日期格式化

以前,模型中的 Eloquent 日期字段存儲(chǔ)格式可以通過重寫 getDateFormat 方法來修改,現(xiàn)在依然可以這么做;但是為了更加方便可以在模型中簡單通過指定 $dateFormat 屬性來替代重寫方法。

在序列化模型到數(shù)組或 JSON 時(shí)日期格式也被應(yīng)用到,當(dāng)從 Laravel 5.0 遷移到5.1時(shí),這將會(huì)改變 JSON 序列化的日期字段的格式。想要在序列化模型中設(shè)置指定的日期格式,你可以在模型中重寫 serializeDate(DateTime $date)方法,這樣就可以在不改變字段存儲(chǔ)格式的情況下對格式化序列化的 Eloquent 日期字段有著更加細(xì)粒度的控制。

Collection 類

sortBy 方法

sortBy 方法現(xiàn)在返回一個(gè)新的 collection 實(shí)例而不是改變已有的 collection:

$collection = $collection->sortBy('name');

groupBy 方法

groupBy 方法現(xiàn)在為每個(gè)父級 Collection 中的 item 返回 Collection 實(shí)例,如果你想要將這些 items 轉(zhuǎn)化為數(shù)組,可以通過 map 方法實(shí)現(xiàn):

$collection->groupBy('type')->map(function($item){
    return $item->all();
});

lists 方法

lists 方法現(xiàn)在返回一個(gè) Collection 實(shí)例而不是數(shù)組,如果你想要將 Collection 轉(zhuǎn)化數(shù)組,使用 all 方法:

$collection->lists('id')->all();

命令&處理器

app/Commands 目錄現(xiàn)在被重命名為 app/Jobs,但是并不需要將你的命令移動(dòng)到新位置,你可以繼續(xù)使用 make:commandhandler:command Artisan 命令生成自己的類。

同樣的,app/Handlers 目錄被合并到 app/Listeners 目錄下,你也不必將已經(jīng)存在的命令和事件處理器進(jìn)行移動(dòng)和重命名,你可以繼續(xù)使用 handler:event 命令生成事件處理器。

通過提供對 Laravel 5.0 目錄結(jié)構(gòu)的向后兼容,你可以無縫升級應(yīng)用到 Laravel 5.1 然后慢慢升級你的事件和命令到新的位置——在一個(gè)對你或你的團(tuán)隊(duì)合適的時(shí)間。

Blade

createMatchercreateOpenMatchercreatePlainMatcher 方法已經(jīng)從 Blade 編譯器中移除,可以使用新的 directive 方法來為5.1版的 Blade 創(chuàng)建自定義的指令。查閱擴(kuò)展 Blade 文檔了解詳情。

測試

在 tests/TestCase.php 文件中新增 protected 屬性 $baseUrl:

protected $baseUrl = 'http://localhost';

翻譯文件

用于為 vendor 包發(fā)布語言文件的默認(rèn)目錄做了移動(dòng),所有 vendor 包語言文件從 resources/lang/packages/{locale}/{namespace} 移動(dòng)到了 resources/lang/vendor/{namespace}/{locale} 目錄。例如,Acme/Anvil 包的 acme/anvil::foo 英語語言文件將會(huì)從 resources/lang/packages/en/acme/anvil/foo.php 移動(dòng)到 resources/lang/vendor/acme/anvil/en/foo.php。

Amazon Web Services SDK

如果你正在使用 AWS SQS 隊(duì)列驅(qū)動(dòng)或者 AWS SES 電子郵件驅(qū)動(dòng),需要升級 AWS PHP SDK 到3.0版本。

如果你正在使用 Amazon S3 文件系統(tǒng)驅(qū)動(dòng),需要通過 Composer 升級相應(yīng)的文件系統(tǒng)包:

  • Amazon S3: league/flysystem-aws-s3-v3 ~1.0

廢棄

以下 Laravel 特性已經(jīng)被廢棄并且會(huì)在2015年12月份的 Laravel 5.2 中被完全移除:

  • 中間件中的路由過濾器
  • Illuminate\Contracts\Routing\Middleware,中間件中不再需要任何 contract,Illuminate\Contracts\Routing\TerminableMiddleware 被廢棄,在中間件中定義一個(gè) terminate 方法替代實(shí)現(xiàn)該接口。
  • Illuminate\Contracts\Queue\ShouldBeQueued 被廢棄,使用 Illuminate\Contracts\Queue\ShouldQueue
  • Iron.io “推入隊(duì)列” 被廢棄, 使用 Iron.io 隊(duì)列和隊(duì)列監(jiān)聽器.
  • Illuminate\Foundation\Bus\DispatchesCommands trait 被廢棄并被重命名為 Illuminate\Foundation\Bus\DispatchesJobs.
  • Illuminate\Container\BindingResolutionException 被移動(dòng)到 Illuminate\Contracts\Container\BindingResolutionException.
  • 服務(wù)容器的 bindShared 方法被廢棄,使用 singleton 方法。
  • Eloquent 和 query builder 的 pluck 方法被廢棄并重命名為 value.
  • Collection 的 fetch 方法被廢棄,使用 pluck 方法.
  • array_fetch 幫助函數(shù)被廢棄, 使用 array_pluck
上一篇:Artisan 控制臺(tái)下一篇:事件