🤔
Laravel 8の初学者躓きポイントまとめ【2020年】
はじめに
こんにちは、Vue.js + Laravel8.x をDocker上に構築して、以下資料を参考に学習した初学者です。
今回はその中で修正が必要になったポイントを、最新版Laravelの変更点に絞って共有します。
Case1:: Class 'App\XXX' not found
migration
した際にモデル呼び出しに失敗する。
前提
- artisanで
make:model
している。
app/Models/XXX.php
<?php
namespace App\Models;
- artisanで
make:seeder
しており、SeederにModelのuseをApp\直下で追加している。
database/seeders/XXXTableSeeder.php
<?php
namespace Database\Seeders;
use App\XXX;
原因
php artisan make:model
でModelを生成すると、
生成先やnamespaceがapp/XXX
からapp/Models/XXX
に変更になっているため、
過去コードを参考にした際に、namespaceがズレてしまう。
解決策
Seederに追加したuseの読み込み先を、正しいModelのnamespaceに直す。
XXXTableSeeder.php
use App\Models\XXX;
Case2:: Target class [XXXController] doesn't exist.
app/Http/Controllers/配下にAPIを定義しても、コントローラ呼び出しに失敗する。
前提
-
routes/api.php
にControllerのクラス名でルーティングを記載している。
routes/api.php
Route::get('/xxx', 'XXXController@index');
- artisanで
make:controller
している。
app/Http/Controllers/XXXController.php
# 内容は問わない
原因
app/Http/Controllers/
がデフォルトのnamespaceから外れたため、
生成したControllerのnamespaceをルートから指定しないと読み込まれない。
解決策(いずれかを選択)
- namespaceをルートから記載する。
routes/api.php
Route::get('/xxx', 'app/Http/Controllers/XXXController@index');
- app/Providers/RouteServiceProvider.phpのnamespaceのコメントアウトを外す。
app/Providers/RouteServiceProvider.php
/**
* The controller namespace for the application.
*
* When present, controller route declarations will automatically be prefixed with this namespace.
*
* @var string|null
*/
protected $namespace = 'App\\Http\\Controllers';
Discussion