1
1

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 5 years have passed since last update.

Laravel 5.7 Release And Upgrade memo

Last updated at Posted at 2018-09-14

Laravel 5.7 Release And Upgrade memo

いつものごとく、メモ書き。9/10にリリースされていました。書いてたけど、書いてたメモを消してしまったので今頃です。

5.7 は LTS ではない ので、2019/03/04 までバグ修正の保守期間、2019/09/04 までセキュリティフィックス期間となるみたいです。一年です。

参考

  1. Release Note
  2. Upgrade Guide

High Impacts

影響が大きいものを。

  1. public/svg ディレクトリを追加。そこに 500.svg,403.svg,404.svg などといったファイルを Github からダウンロードしてきて設置してください。
  2. Blade タグで使用していた or が削除されました。代わりに ?? を使用してください。
  3. Route::redirect のHTTP Statusが 301 から 302 に変更されました。301 を使うときは Route::redirect("/from", "/to", 301) としてください。301/302 リダイレクトの違いは 301リダイレクトと302リダイレクト使い方 ページ・サイト移転方法と期間 アレグロのSEOブログ302 Found MDN で確認してください。

laravel/passport

もし Laravel/Passport を使用している場合は、それのバージョン指定を ^7.0 としてください。

Email Verification

メールアドレスの確認が取れた日付を users テーブルの email_verified_at レコードに保存するようにできるようになりました。

  1. User Model に Illuminate\Contracts\Auth\MustVerifyEmail インターフェースを実装すればいいみたい。そして、 email_verified_at カラムを追加するマイグレーションを云々。
  2. 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::classapp.php とかに追加してやってください。
  3. Router の設定をしているファイルに Auth::routes(['verify' => true]); を追加してくださいな。
  4. EventServiceProvider にイベントを登録する必要があります。下記のような感じ。
      \Illuminate\Auth\Events\Registered::class => [
          \Illuminate\Auth\Listeners\SendEmailVerificationNotification::class,
      ],

詳しくはこっちのリンク: https://laravel.com/docs/5.7/verification

Validation

ちょっとだけ変更があります。 Validation::make などで確認をした入力値は、入力した値しか返しません。Validation に書かれていない値は削除されます。下記を参考。

$data = Validator::make([
    'person' => [
        'name' => 'Taylor',
        'job' => 'Developer'
    ]
], ['person.name' => 'required'])->validate();

dump($data);

// 今までは...
['person' => ['name' => 'Taylor', 'job' => 'Developer']]

// 今回からは...
['person' => ['name' => 'Taylor']]

Guest User Gates / Policies

無名関数などで登録した Gate の引数で、認証していないけど確認はしたい場合には、下記のようなコードを登録できる。っぽい話。

Gate::define('update-post', function (?User $user, Post $post) {
    // ...
});

Symfony Dump Server

dump 関数を使って画面出力してデバッグしていたことを、ターミナルでdumpの出力結果を受け取れるようになります。パッケージは分離されているので、Laravel 5.6 以上だと使えるみたいです。

see: https://github.com/beyondcode/laravel-dump-server

Notification Localization

Notificationの通知を多言語化できるようになったっぽいです。

$user->notify((new InvoicePaid($invoice))->locale('es'));

Console Testing

ask/choise で使われている場合、コンソールコマンドのテストをすることが難しかったですが、 expectsQuestion, expectsOutput, assertExitCode を使えば可能になります。

URL Generator & Callable Syntax

URL作成の actionaction('controller@index')と記述していた箇所が、 action([Controller::class, 'index']) と記述できるようになりました。

Paginator Links

ペジネーションのページ一覧で、ページ数の出力制限ができるようになったっぽいです。そいや出来なかったのか。気づかなかった。

{{ $paginator->onEachSide(5)->links() }}

Filesystem Read / Write Streams

FlySystem に readStreamwriteStream が追加されましたので、クラウド間のIOができるようになったっぽいです。前からなかったっけな…

Storage::disk('s3')->writeStream(
    'remote-file.zip',
    Storage::disk('local')->readStream('local-file.zip')
);

Routing

Route::redirect の HTTP Status Code は 302 へ変更されたっぽいです。意図的に 301 を使いたい場合は下記のように変更する必要があります。

// Return a 302 redirect...
Route::redirect('/foo', '/bar');

// Return a 301 redirect...
Route::redirect('/foo', '/bar', 301);

// Return a 301 redirect...
Route::permanentRedirect('/foo', '/bar');

see: https://ja.wikipedia.org/wiki/HTTPステータスコード#id="3xx_Redirection_.E3.83.AA.E3.83.80.E3.82.A4.E3.83.AC.E3.82.AF.E3.82.B7.E3.83.A7.E3.83.B3"

Blade

変更があります。 or は非推奨となりましたので、PHP 標準の ?? を使うようにしてください。

// Laravel 5.6...
{{ $foo or 'default' }}

// Laravel 5.7...
{{ $foo ?? 'default' }}
1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?