4
5

More than 3 years have passed since last update.

Laravel 6.x を Laravel 7.x にアップグレードする

Last updated at Posted at 2020-10-08

やりたいこと

Laravel 6.xをつかってるがLaravel8.xも出たし、そろそろアップグレードしようと思いやってみた手順です
さすがに、でてすぐの8だと、サードパーティパッケージがまだ対応していないのが多いので7.xにします

自分がやったことをつらつらメモです

PHPのバージョン

PHPのバージョンが7.25が必須になりました
Laravel6の時点で7.2が必要でした
今回自分は非対象でした

パッケージ [影響高]

composer.jsonの下記パッケージを書き換えます

laravel/frameworkを^7.0へ
nunomaduro/collisionを^4.1へ
phpunit/phpunitを^8.5へ
laravel/tinkerを^2.0へ
facade/ignitionを^2.0へ

また、自身が使っているパッケージが7.xに対応しているか確認します

  • 一つ一つ確認する
  • とりあえず最新化してみる
  • とりあえずcomposer updateしたら対象のパッケージで死ぬの見てから判断
  • 一旦composer.jsonから削除し、再度追加

等関連パッケージも同様に対応させます

確認の仕方はPackagistで依存パッケージにilluminateとかが^7のやつだったり、
パッケージのGithubのリポジトリのreadmeを見るか、載ってなかったらissueで7で検索するとLaravel 7.x supportとか出てくるのでそこから判断します

終わり次第

composer udpate

エラーで止まったら、対象のパッケージを確認してください

Your requirements could not be resolved to an installable set of packages.
  Problem 1
    - Conclusion: remove パッケージ名
    - Conclusion: don't install laravel/framework v7.28.4

ちなみに、

Handlerクラスの修正 [影響高]

app/Exceptions/Handler.phpExceptionThrowableに変更します

インポート箇所を修正し
reportrenderメソッドの引数を修正
shouldntReportrenderForConsoleはオーバーライドしている場合修正します

use Throwable;

public function report(Throwable $exception);
public function shouldReport(Throwable $exception);
public function render($request, Throwable $exception);
public function renderForConsole($output, Throwable $exception);

修正後コード

```php:app/Exceptions/Handler.php
<?php

namespace App\Exceptions;

use Throwable;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

class Handler extends ExceptionHandler
{
/**
* A list of the exception types that are not reported.
*
* @var array
*/
protected $dontReport = [];

/**
 * A list of the inputs that are never flashed for validation exceptions.
 *
 * @var array
 */
protected $dontFlash = [
    'password',
    'password_confirmation',
];

/**
 * Report or log an exception.
 *
 * @param \Throwable $exception
 *
 * @throws \Throwable
 */
public function report(Throwable $exception): void
{
    parent::report($exception);
}

/**
 * Render an exception into an HTTP response.
 *
 * @param \Illuminate\Http\Request $request
 * @param \Throwable               $exception
 * @throws \Throwable
 * @return \Symfony\Component\HttpFoundation\Response
 */
public function render($request, Throwable $exception)
{
    return parent::render($request, $exception);
}

}
```


session.phpの修正 [影響高]

config/session.phpの

'secure' => env('SESSION_SECURE_COOKIE', false),
falsenullに変更

config/session.php
'secure' => env('SESSION_SECURE_COOKIE', null),

コマンドの修正 [影響高]

Artisanの裏で動作しているSymfony Consoleはすべてのコマンドが整数値を返すことを期待しています。そのため値を返すすべてのコマンドは確実に整数を返してください。

php artisan make:command等で作るArtisanコマンド
app/Console/Commands/内のコマンドのうち、返り値を与えているコマンドは
整数で返すようにしないといけないそうです

自分のコマンドは返り値をもたせてない(void)なので特に修正不要でした

app/Console/Commands/HogeCommand.php
public function handle()
{
    // 以前
    //return true;

    // 以後
    return 0;
}

laravels/uiのアップグレード [影響高]

Laravelの認証スカフォールドを使用する場合対象です
Laravel6だと^1.0のrequre-devでしたが
Laravel7だとrequireに移動する必要があります。

composer require laravel/ui "^2.0"

Bladeコンポーネントと"Blade x"

AppServiceProviderにuse Illuminate\Support\Facades\Blade;
Blade::withoutComponentTags();を追加

AppServiceProvider
<?php

namespace App\Providers;

use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     */
    public function register(): void
    {
    }

    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        Blade::withoutComponentTags();
    }
}

アップグレードガイドに載ってない

ジョブのfailedの引数がThrowableになりました

app/Jobs/Hoge.php
public function failed(Throwable $exception)
{

}

その他

4
5
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
4
5