WEB/システム/IT技術ブログ

Laravelをバージョン5.8から6.xへアップグレードする

Laravelをバージョン5.8から6.xへアップグレードします。

Laravel 5.8はPHP 7.1.3以上が必要ですが、昨今、PHP 7.1も非奨励となっています。
そこで、セキュリティ面も考慮して、PHP 7.2以上が動作条件となっているLSTのLaravel 6.xへアップグレードしようと思います。

今回は、基本的に公式マニュアルに沿って作業します。
アップグレードガイド 6.x Laravel

まず、composer.jsonをテキストで開きます。

	"require": {
		"php": "^7.1.3",
		"laravel/framework": "5.8.*",

こちらを、以下のように書き換えます。

	"require": {
		"php": "^7.2",
		"laravel/framework": "^6.0",

コマンドラインからcomposerでアップデートを実行します。

> composer update

しばらく待てば、アップグレード完了です。
あっさりですね。。あっさり過ぎる。。本当に大丈夫?w

いろいろなパッケージを追加で組み込んでいるケースでは、アップグレードが途中で停止して、composer.jsonを見直すといったことを繰り返すこともあるようですが、私の場合は一切なかったです。
とりあえずは問題なさそうですが、時間をかけてじっくり細かいところをチェックしたいと思います。

チェックポイント

アップグレード後、運用していると、細かいところで不具合などがちらほら出てきたので、その都度、こちらに追記していきます。

validationのjpgチェックがおかしい

まだ原因が特定できていませんが、validationのimageチェックで、jpg画像だけチェックをパスしなくなってしまいました。
以下、Laravel 5.8の時には問題なく動作していたチェック設定です。

'image' => 'required|file|image|mimes:jpg,jpeg,png,gif|max:10000',

これまでは指定したjpg画像リクエストをパスしていましたが、Laravel 6にアップグレードした後、いずれのjpgを登録してもエラーとなってしまい、validationを通過できなくなってしまいました。

'image' => 'required|file|mimes:jpg,jpeg,png,gif|max:10000',

このように、取り急ぎ「image」を外して対処しています。原因調査中です。

ユーザ新規登録時に本人確認メールが送信できない

ユーザ新規登録時に送信する本人確認メールを日本語化するためにオーバーライドしてたのですが、その処理に変更があったようで、6.xにアップグレードした時点で動作しなくなっていました。
以下「VerifyEmail.php」のオーバーライドした5.8の処理です。

protected function verificationUrl($notifiable)
{
	return URL::temporarySignedRoute(
		'verification.verify',
		Carbon::now()->addMinutes(60),
		[
			'id' => $notifiable->getKey()
		]
	);
}

これが6.0の場合、パラメータhashを追加する必要があります。

protected function verificationUrl($notifiable)
{
	return URL::temporarySignedRoute(
		'verification.verify',
		Carbon::now()->addMinutes(60),
		[
			'id' => $notifiable->getKey(),
			'hash' => sha1($notifiable->getEmailForVerification())
		]
	);
}

本人確認メールの送信がGETからPOSTへ変更

本人確認メールを送信するアクションが、5.8ではGETでしたが、6.xからPOSTに変更になりました。
つまり、5.8での実装では以下でしたが、

<a href="{{ route('verification.resend') }}">送信</a>

6.xでの実装は以下になります。

<form method="POST" action="{{ route('verification.resend') }}">
	@csrf
	<button type="submit">送信</button>
</form>
B!

Comment

  • kz より:

    validationのjpgチェックがおかしい の件
    ValidatesAttributes.php内のvalidateImageで、validateMimesのパラメータに「jpg」が含まれていないことが原因だと思います。

    • yamashiro より:

      kzさんありがとうございます!
      なるほど。Laravel 6.xから「jpg」が除外されたってことですかね。なぜだろう。。
      調査・修正してみます!

yamashiro へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives