Laravel7へのアップグレード内容
仕事でもろもろ事情がありLaravel5系を使用しているので時代に取り残されないよう段階的にアップグレード内容を確認する2
- Symfony5以上じゃないと動かない
調べてみるとここでつまずく人が少なからずいる模様。
アップグレードガイドにApp\Exceptions\Handlerクラス内のいくつかのメソッドの修正が必要と記載がある。引数を一つ増やさないとならないようだ。
また、artisanで動くコマンドは、値を返す場合は整数を返さなくてはならなくなった。
- php7.2.5以上じゃないと動かない
6系が7.2以上だったので少し上がった。注意
- 依存パッケージのアップグレードが必要
アップグレードガイドにアップグレードが必要なパッケージ名とバージョンが書いてあるのでそれ通りにアップグレードする
- Laravelの認証スカフォールドを使用する場合、laravel/uiパッケージをインストールする必要がある
スカフォールドとは「足場」のことらしい。
コントローラーやビューのテンプレートをコマンド一つで自動生成してくれる機能らしく、認可部分もどうやら作ってくれるらしい。
Laravel6のころからあったらしいが、今回のアップデートでパッケージに移動されたようだ。今度使ってみることにする
- Illuminate\Auth\Passwords\TokenRepositoryInterfaceを使用して自前で実装している場合は、メソッドの追加が必要
ディレクトリが示している通り、パスワード関係。トークンを作成、削除するクラス
- Blade::component()がBlade::aliasComponent()へとリネーム
bladeファイルを呼び出すメソッドだが、別名を付けて呼び出せるらしい
(includeばかり使用していた)
- Bladeの組み込みタグコンポーネント機能を無効にしたい場合、AppServiceProviderにて設定が必要
Blade Componentsという機能が追加されたのでおそらくそれを無効にしたい場合の方法。コンポーネントを作成しx-から始まるタグを記述することで読み込むことができる。
- addHidden()とaddVisible()が削除され、代わりのメソッドを使用する必要がある
見たことのないメソッドだと思っていたら、ドキュメントには載せなくなっていたらしい。
- booting()・booted()が追加されたため、モデルで同名のメソッドを作成していた場合はリネームが必要
bootというメソッドがモデルにはある。モデルが作成されたときに呼ばれるメソッドだが、おそらくその間に処理を行えるメソッドなのだろう。試してみないと使いどころはまだ不明
- モデルでtoArray()、toJson()を使用した際の日付の形式が変更になった。以前の形式を使用したい場合は、モデルのserializeDate()メソッドをオーバーライドする必要がある
加工せずそのまま出していた場合は対処が必要
- Factoryタイプの削除
2016年からドキュメントには載せていなかったらしいので影響はなさそうだが念のため。
- getOriginal()がキャストを反映するように変更
getOriginal()は使用したことがなかったが、save前の変更を確認できるらしい。
それがキャストの設定を反映するようになった
- Illuminate\Contracts\Routing\UrlRoutable、Illuminate\Database\Eloquent\Model、Illuminate\Http\Resources\DelegatesToResourcesを使用して自前で実装している場合は改修が必要
まとめてしまったが、影響が大きそうなのはModelだろうか。ただ、継承して使っているだけならば大して修正は必要ない。
- Zend Diactorosパッケージが非推奨になった(別パッケージを使用する必要あり)
気が付いたらZendフレームワークはLaminasというものに生まれ変わったらしい。知らなかった…
Zend Diactoros自体についてはhttpリクエスト・レスポンスを扱うライブラリのようだ。
- mail設定ファイルが変更になったたため、確認が必要
- Markdownメールテンプレートがアップデート
bladeの書き方しかしていなかったが、mail::messageコンポーネントというものを使用できたらしい。その機能がアップデートされたとのことなので、やはり今度使用する
- swift.mailerとswift.transportにアクセスする場合はそれぞれメソッドを使用してアクセスする必要がある
- Illuminate\Http\Resources\Json\Resourceが削除
Illuminate\Http\Resources\Json\JsonResourceを使用すればよい
リソースの使いどころを把握できていないので今度使用する
- getRoutes()が返すインスタンスの変更
使用できるメソッドなど変わっていないか確認が必要
- CORSサポートがデフォルトで含まれるようになった
- arrayセッションドライバのデータはリクエスト中は維持されるようになった
いままで変な動き方するなと思っていたところだった
- TestResponseクラスのassertSee()、assertDontSee()、assertSeeText()、assertDontSeeText()、assertSeeInOrder()、assertSeeTextInOrder()は渡された値をエスケープするようになった
テストコードなのでアプリに影響はないだろうが、CI、CDに組み込んでいれば動かなくなる場合もあるので要確認
- Illuminate\Foundation\Testing\TestResponseはIlluminate\Testing\TestResponseにリネーム
- Illuminate\Foundation\Testing\AssertはIlluminate\Testing\Assertにリネーム
テストコードに関する修正。useしている場合など修正が必要だろうか
- differentルールはリクエストに含まれるパラメータのうち1つ足りなければバリデーションエラーとするように変更
バリデーションの振る舞いが変更になった。使っているところがあれば確認が必・