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 はリクエストに含まれる指定されたパラメータの一つが無い時は失敗するようになりました。