新規プロジェクトを作成する時に、毎回Modelsディレクトリを作成するので、メモ。(*Laravel6系の構成です)
Laravelを初めて触る人に向けて補足すると、新規プロジェクトを作成すると、Userモデルがapp/に作成されていますが、これは、開発者の意図があります。以下、日本語ドキュメントより。
Laravelを学習し始めるとき、多くの開発者は models ディレクトリが存在しないことに戸惑います。しかし、意図的にこのディレクトリを用意していません。多くの別々の人達にとって、その意味合いは様々なため、"models"という言葉の定義は曖昧であることに私達は気づきました。ある開発者たちはすべてのビジネスロジックを総称してアプリケーションの「モデル」と呼び、一方で別の人達はリレーショナルデータベースに関連するクラスを「モデル」として参照しています。
このため、私達はEloquentモデルをデフォルトではappディレクトリ下へ設置することを選択し、開発者自分が選んだどこか別の場所へ設置してもらうことにしました。
これは、初学者にとっては、戸惑うかもしれませんが、Laravelを使っていくうちに、この構成は、プロジェクトによって柔軟に構成が変えられるので、良い考えだと思います。
では、モデルディレクトリの構成変更をしていきましょう。
##app/Modelsフォルダ作成
mkdir app/Models
##User.phpをModelsディレクトリへ移動
namespace(名前空間)も App\Models
に変更しておきましょう。
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
##autoloadの参照
まず、オートロードの参照を追記しましょう。
これは、 composer.json
で制御しているので修正
"autoload": {
"psr-4": {
"App\\": "app/",
"Models\\": "app/Models/"
},
"classmap": [
"database/seeds",
"database/factories"
]
},
その他関連ファイルの名前空間を修正
Laravel6.xは以下が修正対象です。
- /database/factories/UserFactory.php
- /config/auth.php
- /app/Http/Controllers/Auth/RegisterController.php
<?php
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use App\Models\User;
use Faker\Generator as Faker;
use Illuminate\Support\Str;
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\Models\User;
以上!