参考: バージョン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');
});