Laravel6からLaravel9へのプロジェクト移行で変更した箇所

2022年5月28日土曜日

Laravel

t f B! P L
Laravelのバージョン6で作成したプロジェクトを、バージョン9で作り直したときの変更箇所のメモです。 

プロジェクト作成

公式サイトを参考に、composerでプロジェクトを作成します。Laravel9の公式サイトの説明にはバージョンを指定したプロジェクトの作成例が見当たりませんが、バージョン8の作成例に従うと次のようになります。

$composer create-project laravel/laravel:^9.0 project9
Laravel6のプロジェクトがBootstrapと認証のScaffoldingを使っていたので、Laravel9でも使用できるようにします。

$composer require laravel/ui
$php artisan ui bootstrap --auth

ルーティング

コントローラ

ルーティングのコントローラ指定をcontrollerメソッドで書き換えます。prefixはprefixメソッドで指定します。
Laravel6:

Route::group(['prefix' => 'admin'], function() {
    Route::get('post/create', 'Admin\PostController@add');
});
Laravel9:

use App\Http\Controllers\Admin\PostController;
Route::controller(PostController::class)->prefix('admin')->group(function() {
    Route::get('post/create', 'add');
});
同じ名前のControllerが別ディレクトリに存在する場合は、asで別名を指定します。

use App\Http\Controllers\PostController as PostController2;

認証

middleware('auth')の認証指定は同様です。
Laravel6:

Route::group(['prefix' => 'admin'], function() {
    Route::get('post/create', 'Admin\PostController@add')->middleware('auth');
});
Laravel9:

Route::controller(PostController::class)->prefix('admin')->group(function() {
    Route::get('post/create', 'add')->middleware('auth');
});
グループにauthを一律設定する場合は次のように指定します。

Route::controller(PostController::class)->prefix('admin')->middleware('auth')->group(function() {
    Route::get('post/create', 'add');
    Route::post('post/create', 'create');
});

webpack.mix.js

.sourceMaps()が新たに追加されていることに注意して、.scssの指定を追記します。

mix.js('resources/js/app.js', 'public/js')
    .sass('resources/sass/app.scss', 'public/css')
    .sass('resources/sass/admin.scss', 'public/css')
    .sourceMaps();

Bootstrap

Bootstrapのバージョンが5になっているので、レイアウトの調整が必要です。 例えば、Auto Marginの.ml-autoと.mr-autoは、.ms-autoと.me-autoに変更します。

    ml-auto => ms-auto (start)
    mr-auto => me-auto (end)
フォームの要素が詰まって表示されたので、CSSで.form-groupにmargin-bottomを追加しました。

.form-group {
  margin-bottom: 1rem;
}

Lang設定

Lravel9から、Lang設定がこれまでのresources/langからプロジェクトのルートディレクトリ直下に移動しています。
Lravel6:

project9/resources/lang

Lravel9:

project9/lang

モデル

Laravel8でModelのディレクトリがModelsに変わったので、Controllerのuse指定を変更します。 
Laravel6:

use App\Posts;
Laravel9:

use App\Models\Posts;
Laravel8から、Model生成時にuse HasFactoryが追加されます。

class Post extends Model
{
    use HasFactory;
}

Migration

Laravel7からbigIncrements('id')のエイリアスとしてid()が追加されているので、変更します。 Laravel6:

$table->bigIncrements('id');
Laravel9:

$table->id();

Bladeのリンク指定

actionの書式が変更になっています。 
Laravel6:

<a href="{{ action('Admin\PostController@add') }}" role="button" class="btn btn-primary">新規作成</a>
Laravel9:

<a href="{{ action([App\Http\Controllers\Admin\PostController::class, 'add']) }}" role="button" class="btn btn-primary">新規作成</a>
Laravel9だとactionが長くなるので、routeに書き換えました。web.phpにnameの設定が必要になります。

<a href="{{ route('admin.post.add') }}" role="button" class="btn btn-primary">新規作成</a>

use App\Http\Controllers\Admin\PostController;
Route::controller(PostController::class)->prefix('admin')->name('admin.')->middleware('auth')->group(function() {
    Route::get('post/create', 'add')->name('post.add');
});

このブログを検索

QooQ