#やりたいこと
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.php
のException
をThrowable
に変更します
インポート箇所を修正し
report
、render
メソッドの引数を修正
shouldntReport
とrenderForConsole
はオーバーライドしている場合修正します
use Throwable;
public function report(Throwable $exception);
public function shouldReport(Throwable $exception);
public function render($request, Throwable $exception);
public function renderForConsole($output, Throwable $exception);
修正後コード
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);
}
}
</div>
</details>
#session.phpの修正 [影響高]
config/session.phpの
`'secure' => env('SESSION_SECURE_COOKIE', false),`の
`false`を`null`に変更
```php:config/session.php
'secure' => env('SESSION_SECURE_COOKIE', null),
#コマンドの修正 [影響高]
Artisanの裏で動作しているSymfony Consoleはすべてのコマンドが整数値を返すことを期待しています。そのため値を返すすべてのコマンドは確実に整数を返してください。
php artisan make:command
等で作るArtisanコマンド
app/Console/Commands/
内のコマンドのうち、返り値を与えているコマンドは
整数で返すようにしないといけないそうです
自分のコマンドは返り値をもたせてない(void
)なので特に修正不要でした
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();
を追加
<?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
になりました
public function failed(Throwable $exception)
{
}