34
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel 7 Release Memo

Last updated at Posted at 2020-03-04

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 の要素を任意の型にキャストすることができるようになります。

Custom Cast

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

  1. App\Exceptions\Handler クラスの report,render メソッドの引数が、Exception から Throwable に変わります。
use Throwable;

public function report(Throwable $exception);
public function render($request, Throwable $exception);

[High] session.php

  1. 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\TokenRepositoryInterfacerecentlyCreatedToken メソッドが追加されました。カスタマイズして使っている時は注意してね。

Blade

力尽きたンゴ

[Medium] addHidden,addVisible

ドキュメント化されていない addHidden,addVisible メソッドは削除されました。代わりに makeHidden,makeVisible を使ってください。

[Low] The booting / booted Methods

わからん。なんだこれ。

[High] Date Serialization

Larvel 7 からtoArray,toJson を使ったときの、日付のシリアライズが変わります。今までは CarbontoJson の結果を書き出していましたが、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 はリクエストに含まれる指定されたパラメータの一つが無い時は失敗するようになりました。

34
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?