2019/09/04 リリース。おめでとうございます。5.9 を飛ばしての LTS バージョンになりました。5.5が以前のLTSでしたので久々のLTSになります。(5.5 → 6.0 へのアップグレード量は多い気がするの…)
このバージョンからバージョン番号の法則性に semver が採用されます。なんかしれっと新しい機能が追加されたりしても追っかけられるようになりました。
そして Laravel をいい感じにサーバレスにさせる Vapor に対応しているみたいです。
そんなわけで、アップグレードメモ。今回も変更点多いけど、細かいところや以前から消える予定の物が消えたので、アップグレード事態は一時間で終わるかも?
メモ書き程度に一覧を書いているけど、ADD
,LOW
部分は気が向いたら追加する。
- HIGH : Authorized Resources & viewAny
- HIGH : String & Array Helpers
- medium : PHP 7.2 Required
- medium : Authentication RegisterController
- medium : Carbon 1.x No Longer Supported
- medium : Database
Capsule::table
Method - medium : Eloquent Arrayable & toArray
- medium : Eloquent
BelongsTo::update
Method - medium : Eloquent Primary Key Types
- medium : Localization
Lang::trans
andLang::transChoice
Methods - medium : Localization
Lang::getFromJson
Method - medium : Queue Retry Limit
- medium : Resend Email Verification Route
- medium : The Input Facade
- Optional : The
AWS_REGION
Environment Variable - LOW: Authorization Responses
- LOW: The
Illuminate\Contracts\Auth\Access\Gate
Contract - LOW: The
cursor
Method - LOW: The
MustVerifyEmail
Contact - LOW: Mail Mandrill & SparkPost Drivers Removed
- LOW: Notifications Nextmo Routing Removed
- LOW : Password Validation in PasswordReset
- LOW : The
between
method in scheduling - LOW : Rackspace Driver Removed in Storage
- ADD : Route URL Generation & Extra Paramators
- NEW : Facade/Ignition
- NEW : Improved Authorization Responses
- NEW : Job Middleware
- NEW : Lazy Collections
- NEW : Eloquent Subquery Enhancements
- NEW : Laravel UI
HIGH : Authorized Resources & viewAny
- see : Authorization via Controller Helpers / Laravel 6.0
- see : Authorization via Controller Helpers / Laravel 5.8
Controller Helper にて、Policy Method viewAny
が追加されました。それに対応した Controller Method 側には index
が追加され、すでに index
メソッドがあるばあいは呼ばれなくなるそうです。
HIGH : String & Array Helpers
Laravel Helper にあった関数 str_
や array_
が新しい laravel/helpers パッケージに移りました。今までどおり使うには composer require laravel/helpers
を実行して取り込んでください。
NEW : Facade/Ignition
開発環境時のエラーページに Ignition が採用されたそうです。
NEW : Improved Authorization Responses
認証時のメッセージをかんたんに変更できて見せられるようになりました。
Router/Controller の実行コードに Gate::inspect('view', $flight)->denied()
や $this->deny('Explanation of denial')
といった感じで書けるようになりました。
see : Gate Response / Laravel 6.0
NEW : Job Middleware
Job に Middleware を被せられるようになりました。やったね、これで特定の Job のログの書き出し先を変更するのがちょっと楽になるよ!
see : Job Middleware / Laravel 6.0
New : Lazy Collections
遅延評価っぽい。
see : Lazy Collection / Laravel6.0
NEW : Eloquent Subquery Enhancements
サブクエリーに対応しました。
……どういうクエリーが発行されるかドキュメント見ただけじゃわからんので、自身で検証してください。
see : Eloquent Advanced Subqueries / Laravel6.0
NEW : Laravel UI
Laravel に梱包されていた JS まわりが分離され、 laravel/ui となりました。
see : Laravel UI / Laravel6.0
medium : PHP 7.2 Required
PHP 7.1 以下は非推奨になりました。PHP 7.1 は 2019.12.1 にサポートが切れます。
see : https://www.php.net/supported-versions.php
medium : Authentication RegisterController
Laravel 標準の RegisterController
に変更がありました。
RegisterController
の小クラスで registered
や register
メソッドを使用しているとき、親クラスの registered
メソッドでユーザの追加やイベントの発火などをしているので、 parent::registered()
や parent::register
を呼び出さないとユーザの新規登録に失敗します。
medium : Carbon 1.x No Longer Supported
Laravel が Carbon1.x のサポートを打ち切りますので、Carbon2.0 にアップグレードしてください。
Carbon2 は TimeZone 表記(YYYY-MM-DD HH:ii:ssZZZZ) 対応がメインっぽい。
see : Drop Carbon v1 / github.com
medium : Database Capsule::table
Method
注意 この変更は illuminate/database
を使っている Laravelでない アプリケーションに影響があります。(Lumen ってことやろか?)
Illuminate\Database\Capsule\Manager::table
メソッドの第2引数が変わったので、それに合わせて変更をしてください。
see : Capsule table / Laravel 6.0 Upgrade guide
medium : Eloquent Arrayable & toArray
Eloquent の toArray
メソッドの帰り値が Illuminate\Contracts\Support\Arrayable
を実装する属性を普通の配列(array
)にキャストするようになりました。
medium : Eloquent BelongsTo::update
Method
$model->user()->update([]);
のばあいだと event が発生していしまいますが $model->user->update([]);
のばあいだと event が発生しなくなりました。
medium : Eloquent Primary Key Types
Primary Key は int/bigint だけだったのが string
も対応できるようになりました。
medium : Localization Lang::trans
and Lang::transChoice
Methods
Lang クラスのメソッド名の変更がありました。
-
Lang::trans
=>Lang::get
-
Lang::transChoice
=>Lang::choice
Illuminate\Contracts\Translation\Translator
を使用しているクラスも同様に変更が必要です。
medium : Localization Lang::getFromJson
Method
Lang::get
と Lang::getFromJson
が統合されました。 Lang::getFromJson
を呼んでいる部分は、 Lang::get
を呼び出すように変更する必要があります。
medium : Queue Retry Limit
php artisan queue:work
において、Jobの実行が失敗結果のときは再実行を、成功するまで無限回実行します。しかし Laravel6 では一回失敗したらすぐに failed
になるように変更されました。もし今まで通りの成功するまで実行する場合は --tries=0
オプションを追加してください。
(これ Redis や Database の接続が死んだとき、failed_queue
テーブルにデータが入らないときは、死んだままになるはずよね…?)
(これ Laravel Vapor に対応させるために追加されたオプションよね。)
medium : Resend Email Verification Route
標準の再メール認証が Get Request だったのを、 Post Request + csrf 付きになりました。古いテンプレートに変更を加えてください。
medium : The Input Facade
Input
Facade は Request
Facade と機能がかぶっているので削除されました。Input::get()
は Request::input()
に置換してください。