Laravel 7 Release
Laravel7 です。素数です。おめでとうございます。
前回の Laravel6 から半年ぶりのメジャーリリースです。semvar になったので、数字のステップは大きいですが、変更内容は意外と無い(と信じたいです)。
LTS Version ではないので、Bugfix は 2020/09/03、SecurityFix は 2021/03/03 までの予定だそうです。
Upgrade Guide には馴染みになった High Impact Changes, Medium Impact Changes があります。
2020/04/28: 追記:
リリース情報は Releases The Laravel Blog から追っかけられます。
新機能
Model Cast
Cast 機能の自由化: CastsAttributes を使ったクラスを使えば、Model の要素を任意の型にキャストすることができるようになります。
MailDriver
何か \Mail::mailer('hoge')->send() みたいなのができるようになるそうです。 ~数年前にほしかったなぁ…自前実装したよ…~
Mail::mailer('postmark')
->to($request->user())
->send(new OrderShipped($order));
HTTP Client
HTTP Client の Facade ができて、Guzzleの長いコードを書かずに、サクッとHTTP Client が使えるようになるっぽいです。 ~Requests やいかんのか~
Route Model Binding
id 指定だけだったのが、任意のフィールド指定ができるようになりました。
Route::get('api/posts/{post:slug}', function (App\Post $post) {
return $post;
});
Artisan Test
今まで ./vendor/bin/phpunit とやっていたのが php artisan test でも動くようになりました。
Queue maxExceptions Configuration
じゃんじゃか例外を出している時の上限数を決めて、止めることができるようです? ~redis が死んだ時に出まくった事あるけど、アレも止まるんやろか~
大きな変更点
依存関係
Symfony5系を使うようになりました。 composer.json を編集して composer up をする必要があります。
'laravel/framework': '^7.0''nunomaduro/collision': '^4.1''phpunit/phpunit': '^8.5''facade/ignition': '^2.0'
[High] Symfony5
-
App\Exceptions\Handlerクラスのreport,renderメソッドの引数が、ExceptionからThrowableに変わります。
use Throwable;
public function report(Throwable $exception);
public function render($request, Throwable $exception);
[High] session.php
-
session.php設定ファイルに存在する要素secure,same_siteの値が微妙に変更されました。
- 旧:
'secure' => env('SESSION_SECURE_COOKIE', false), - 新:
'secure' => env('SESSION_SECURE_COOKIE', null), - 旧:
'same_site' => null, - 新:
'same_site' => 'lax',
[High] Scaffolding
認証周りの Scaffolding は laravel/ui へ移動しました。もし使っている場合は、 composer require laravel/ui "^2.0" でインストールをしてください。
[Low] recentlyCreatedToken method add to Illuminate\Auth\Passwords\TokenRepositoryInterface
Illuminate\Auth\Passwords\TokenRepositoryInterface に recentlyCreatedToken メソッドが追加されました。カスタマイズして使っている時は注意してね。
Blade
力尽きたンゴ
[Medium] addHidden,addVisible
ドキュメント化されていない addHidden,addVisible メソッドは削除されました。代わりに makeHidden,makeVisible を使ってください。
[Low] The booting / booted Methods
わからん。なんだこれ。
[High] Date Serialization
Larvel 7 からtoArray,toJson を使ったときの、日付のシリアライズが変わります。今までは Carbon の toJson の結果を書き出していましたが、ISO-8601 にタイムゾーンと、fractional seconds(秒の小数点以下)を含んだフォーマットで書き出すようになります。この影響により、クライアントサイド側のパーサー周りを修正する必要があります。
具体的には 2019-12-02 20:01:00 と表記されていた日付は 2019-12-02T20:01:00.283041Z になります。
もしこの変更に不都合がある場合は serializeDate メソッドをオーバーライドで実装して任意のフォーマットで書き出すようにしてください。
/**
* Prepare a date for array / JSON serialization.
*
* @param \DateTimeInterface $date
* @return string
*/
protected function serializeDate(DateTimeInterface $date)
{
return $date->format('Y-m-d H:i:s');
}
[Medium] Factory Types
非ドキュメントの部分の factory types が消える予定?
[Low] The getOriginal Method
cast 機能が入ったので $model->getOriginal() が変更されます。使う場合は getRawOriginal を使ったら良いみたい。
[Low] Route Binding
力尽きたンゴ
[Low] PSR-7 Compatibility
力尽きたンゴ
[未知数] Mail :: Configuration File Changes
Multiple Mail 対応に伴い、 mail.php の設定ファイルが変更されました。人によってはごっそり変わるかもしれませんので、元ファイル を参考に手動migrateをしたほうが良いです。
[Low] Markdown Mail Template Updates
デザイン変わったやで
[Low] Queue Deprecated --daemon Flag Removed
queue:work コマンドにある --daemon オプションは削除されます。そして daemon 起動が標準となります。
[Low] Resources The Illuminate\Http\Resources\Json\Resource Class
Illuminate\Http\Resources\Json\Resource クラスは廃止されました。代わりに Illuminate\Http\Resources\Json\JsonResource を継承して使用してください。
[Medium] Unique Route Names
Routing に付ける名前で重複した場合、以前までは重複チェックせずに起動していました。Laravel 7 からはユニークになるように設定してください。重複した場合、意図しない動きになるそうです。 ~開発中にぼへーっと重複させて動かしちゃうけど、後者優先で動いていたけど、その挙動がバラバラになるのかしら~
[Medium] Cors Support
Cross-Origin Resource Sharing 用の設定ファイルが、 config/cors.php として増えました。元ファイルを参考に頑張ってください。
[Medium] The assertSee Assertion
力尽きた
[Medium] The different Rule
different Rule はリクエストに含まれる指定されたパラメータの一つが無い時は失敗するようになりました。