Laravel 5.7 Release And Upgrade memo
いつものごとく、メモ書き。9/10にリリースされていました。書いてたけど、書いてたメモを消してしまったので今頃です。
5.7 は LTS ではない ので、2019/03/04 までバグ修正の保守期間、2019/09/04 までセキュリティフィックス期間となるみたいです。一年です。
参考
High Impacts
影響が大きいものを。
-
public/svg
ディレクトリを追加。そこに500.svg
,403.svg
,404.svg
などといったファイルを Github からダウンロードしてきて設置してください。 - Blade タグで使用していた
or
が削除されました。代わりに??
を使用してください。 -
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
レコードに保存するようにできるようになりました。
-
User
Model にIlluminate\Contracts\Auth\MustVerifyEmail
インターフェースを実装すればいいみたい。そして、email_verified_at
カラムを追加するマイグレーションを云々。 -
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class
をapp.php
とかに追加してやってください。 - Router の設定をしているファイルに
Auth::routes(['verify' => true]);
を追加してくださいな。 -
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作成の action
で action('controller@index')
と記述していた箇所が、 action([Controller::class, 'index'])
と記述できるようになりました。
Paginator Links
ペジネーションのページ一覧で、ページ数の出力制限ができるようになったっぽいです。そいや出来なかったのか。気づかなかった。
{{ $paginator->onEachSide(5)->links() }}
Filesystem Read / Write Streams
FlySystem に readStream
と writeStream
が追加されましたので、クラウド間の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');
Blade
変更があります。 or
は非推奨となりましたので、PHP 標準の ??
を使うようにしてください。
// Laravel 5.6...
{{ $foo or 'default' }}
// Laravel 5.7...
{{ $foo ?? 'default' }}