はじめに
私は現在、PHP/Laravelでポートフォリオ作成をしている学習中の者です。
もし間違っている箇所があればお知らせいただけたら幸いです。
ポートフォリオを作成中に、Laravelのバージョン8系では記述の仕方が変わっていたり、(新しいため)情報も少なく、長い目でみて時間ロスが多く発生すると思い、6系に変えてみようと思いました。
開発初期段階だったので、軽い気持ちで変えてみたら色々エラーが出たので記事にしました。
-
こちらの記事よりDockerの環境構築をさせていただきました。Laravelのバージョンを指定して環境構築するやり方も載っています。
最強のLaravel開発環境をDockerを使って構築する【新編集版】 - Qiita -
Laravel8に関してはこちらの記事が参考になりました。
Laravel8がリリースされました!新機能の翻訳 | WEBコンサルティング・WEB制作のフリーランス uiuifree -
Laravelのバージョンについてはこちらの記事が参考になりました。
Laravelのバージョンのおすすめは?2020年から学び始めるなら - ネビ活 | ネットビジネス生活
Laravel6系に変更後
バージョン変更に関しては割愛します。
プロジェクト内のデータが8系の時のままだと以下のようなエラーが出ます。
シーディング実行エラー
$ php artisan migrate:fresh --seed
//注意してお使いください。
//このコマンドはデータベースの中身を全部クリアにしてからシーディングデータを入れ直すものです。
このコマンドでデータベースにデータを入れようとしたところ以下のエラーが発生
Illuminate\Contracts\Container\BindingResolutionException : Target class [PostTableSeeder] does not exist.
解決法
8系と6系とでは記述が変わっていた為、seederファイルを修正
<?php
//namespace Database\Seeders;←削除
use Illuminate\Database\Seeder;
//use Illuminate\Support\Facades\DB;←削除
class PostsTableSeeder extends Seeder
{
//~~
Modelファイルエラー
$ php artisan serve
でlocalhostに繋ぎ確認してみると以下のエラーに
Trait 'Illuminate\Database\Eloquent\Factories\HasFactory' not found
解決法
Laravel8ではHttp/Modelディレクトリの配下に入ってましたが、Laravel6ではHttpディレクトリの配下に直接入れるのがデフォルトのようです。
Httpディレクトリ配下に移し空になったModelディレクトリを削除。
Modelファイルを一部書き換えます。
<?php
//namespace App\Models;
//↓以下に修正
namespace App;
use Illuminate\Database\Eloquent\Factories\HasFactory;//削除
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;//削除
Controllerエラー
Controllerファイルも書き換えます。
<?php
namespace App\Http\Controllers;
//use App\Models\Post;
//↓以下に修正
use App\Post;
use Illuminate\Http\Request;
class PostController extends Controller
{
Routingエラー
Routingファイルも書き換えます
<?php
use Illuminate\Support\Facades\Route;
//use App\Http\Controllers\TestController; //削除
//Route::get('/',[PostController::class, 'index']);
//↓以下のように修正
Route::get('/', 'PostController@index');
ひとまずこれにて無事に6系での開発が進めらる状態になりました。 特に初学者の方はLaravelで何か作り始める前にバージョンはよく考えて決めましょう(笑)