Laravel6.2 → Laravel 7.xへのアップグレード手順

公式ドキュメント: Upgrade Guide

Update your laravel/framework dependency to ^7.0 in your composer.json file. In addition, update your nunomaduro/collision dependency to ^4.1, phpunit/phpunit dependency to ^8.5, laravel/tinker dependency to ^2.0, and facade/ignition to ^2.0.

composer.json

//省略

"laravel/framework": "^7.0",
"nunomaduro/collision": "^4.1",
"phpunit/phpunit": "^8.5"
"laravel/tinker": "^2.0",
"facade/ignition": "^2.0",
"laravel/ui": "^2.0",

// 省略

App/Exceptions/Handler
-> composer.updateする前に変更しないとエラーになる

use Throwable;

// public function report(Exception $exception)
public function report(Throwable $exception)

// public function render($request, Exception $exception)
public function render($request, Throwable $exception) 

$ php composer.phar update
$ php artisan –version
Laravel Framework 7.2.1

## 主要変更点
– Symfony 5 関連のアップグレード
— App\Exceptions\Handlerクラスのreportとrender
— コンフィグファイルのsessionのoptionのデフォルト値の変更
– Authenticationー認証
— laravel/uiを~2.0にする必要
– Date Serializationー日付のシリアライズ化
— 2019-12-02 20:01:00は7系から2019-12-02T20:01:00.283041Zに更新
– $model->getOriginal()メソードはキャストされたモデルを使用

## その他変更点
– PHPのバージョン 7.2.5以上
– Blade::componentメソードをBlade::aliasComponentに変更
– Blade Components & “Blade X”
– “factory types”機能を削除
– addHiddenとaddVisible削除
– bootingとbootedをEloquentに追加
– resolveRouteBindingメソードは$fieldパラメータ使用
– Illuminate\Auth\Passwords\TokenRepositoryInterfaceにrecentlyCreatedTokenを使用
– queue:workコマンドのフラグ–daemonが削除
– Illuminate\Http\Resources\Json\Resourceは削除
– array セッションドライバのデータはカレントリクエストに持続的にアクセス
– TestResponseクラスのassertSee アサーションは自動的にエスケープ
– differentルールはリクエストに特定のパラメータが足りない場合に通らない

## 各変更点の確認
– Authentication
laravel/ui 2.0で異常なし

– コンフィグファイルのsessionのoptionのデフォルト値の変更
config/session.php

// 'secure' => env('SESSION_SECURE_COOKIE', false),
'secure' => env('SESSION_SECURE_COOKIE', null),

// 'same_site' => null,
'same_site' => 'lax',

– Date Serialization
一部データをJasonで送って、blade側でdateのデータ(created_at)をmomentでMM/DD HH:mmに変換しているが、挙動確認したところ影響はない。

– $model->getOriginal()
画像の保存処理で、$file->getClientOriginalName();としており、似ているため念の為確認したが、やはり問題なし

– Mail Configuration File Changes
laravel7.2をcreateして一応違いを確認しておく。
6系だとconfig/service.phpに書かれていたsmtp周りがconfig/mail.phpに纏められています。確かに、なんでservice.phpに?って思っていたので、これは良い改良です。

'mailers' => [
        'smtp' => [
            'transport' => 'smtp',
            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
            'port' => env('MAIL_PORT', 587),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME'),
            'password' => env('MAIL_PASSWORD'),
        ],

        'ses' => [
            'transport' => 'ses',
        ],

        'sendmail' => [
            'transport' => 'sendmail',
            'path' => '/usr/sbin/sendmail -bs',
        ],

        'log' => [
            'transport' => 'log',
            'channel' => env('MAIL_LOG_CHANNEL'),
        ],

        'array' => [
            'transport' => 'array',
        ],
    ],

しかし、まさかもうLaravel6.x系が古くなるとは思わなかった。。