Laravel 5.1 から 8.1 にバージョンアップ 仕事の関係で laravel のアップグレード作業をしましたが、簡単にできると思ったけど意外とハマったことを記録します。 laravel5.7か8から使い始めたので5.1ってそんなに変わらないだろうと単純に思ったことが一番のミス。特に認証周りですが、laravelのデフォルトauth機能使っていたらそんなに問題ないかもしれませんが、カスタマイズドライバーの自己流認証に出会って、いろいろ大変でした。当たり前ですが、5.1触ったことない人間はまず5.1と5.2のドキュメントを読んで変更該当箇所のロジックを理解して修正した方がスムーズに行くはずです。
5.1 から 5.2 5.1 から 5.2 へのアップグレード(opens new window)
認証 config/app.php config/auth.php app/Providers/AuthServiceProvider.php 設定ファイル カスタイムドライバ ユーザを取得するカスタムメソッドを定義する Auth::extend メソッドを使っている場合、カスタムユーザプロバイダを定義するための Auth::provider を使ってください。カスタムプロバイダを定義したら、新しい auth.php 設定ファイルの providers 配列の中でそれを設定してください。
カスタム認証プロバイダについての詳細は、認証の完全なドキュメント(opens new window) で調べてください。
app/Providers/AuthServiceProvider.php
サービスプロバイダ app.php 設定ファイルのサービスプロバイダリストから
Illuminate\Foundation\Providers\ArtisanServiceProvider
Illuminate\Routing\ControllerServiceProvider
を削除
5.2 から 5.3 5.2 から 5.3.0 へのアップグレード(opens new window)
Providers App\Providers\EventServiceProvider.php 修正
In RouteServiceProvider.php line 25:
Declaration of App\Providers\RouteServiceProvider::boot(Illuminate\Routing\Router $router) should be compatible with Illuminate \Foundation\Support\Providers\RouteServiceProvider::boot()
App\Providers\RouteServiceProvider.php 修正
In ValidatorServiceProvider.php line 19:
Declaration of App\Providers\ValidatorServiceProvider::boot(Illuminate\Routing\Router $router) should be compatible with Illuminate\Foundation\Support\Providers\RouteServiceProvider::boot()
App\Providers\ValidatorServiceProvider.php 修正
配列 配列ヘルパーキーと値順序変更 💩
first
last
where
メソッドに渡すクロージャの、最初の引数として「値」が渡されます。
コレクション コレクションメソッドキーと値順序変更 :hankey
first
last
contains
コレクションメソッドでは、指定されたコールバッククロージャの第1引数に「値」 が渡されます。
設定 config/app.php
設定ファイルの中に、以下の設定オプションを追加してください。
コントローラー コンストラクターの中からセッションアクセス
Laravel5.3 では、セッションや認証済みユーザにコントローラのコンストラクタではアクセスできません。なぜなら、ミドルウェアがまだ実行されていないからです。
代わりに、クロージャベースのミドルウェアをコントローラのコンストラクタで直接で意義できます。この機能を使用する前に、アプリケーションが Laravel5.3.4 以上で実行されていることを確認してください。 代わりに、クロージャベースのミドルウェアをコントローラのコンストラクタで直接で意義できます。
$value = $request->session()->get('key');
は OK
DB コレクション Fluent なクエリビルダ(opens new window) が普通の配列の代わりに、Illuminate\Support\Collection インスタンスを返すようになりました。
AppServiceProvider の boot メソッドで、以下のように morphMap を定義する必要があります。 結論 phpやlaravelだけのアップグレードは難しいものではないが、5.1から5.2へアップグレードする時のカスタマイズ認証のところが一番大変でした。グーグル先生に聞いても答えがなく、5.1のドキュメントを繰り返して読んで、カスタマイズ認証のやり方を先ず学習してからなんとか5.2にアップグレードできました。そもそもこれってメジャーの変更ではないか?でも思いました。それ以降のアップグレードはsessionnあたりやarray配列ヘルパーなどの変更がありました。あと、注意点としてphp artian cache:clear
php artisan config:clear
php aritsan view:clear
系のキャッシュをクリアはまめにした方が無難ですね。 複数gitブランチ切り替えて作業する場合はcomposer update
する前にvendorディレクトリ削除とcomposer.lock削除した作業効率的になります。 sessionが見つからないエラーは何回か出ましたが、結局php artisan key:generate
で解消できました。