Laravel

Ошибка в Laravel 5 «[ReflectionException] Class …TableSeeder does not exist»

Небольшая статья о том, как починить ошибку в Laravel 5 с загрузкой фикстур (Seeder). Данная ошибка встречается у многих любителей популярного PHP фреймворка Laravel. Если вы хотите написать класс (Seeder), который будет заполнять ту или иную таблицу в базе данных записями, то вы точно столкнетесь с данной ошибкой. Выглядит она следующим образом:

Класс UserRoleTableSeeder  должен находится в файлеdatabase/seeds/UserRoleTableSeeder.php и находится в глобальной области видимости.

Пример файла с созданием тестовых данных:

<?php use Illuminate\Database\Seeder; class UserRoleTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { DB::table('user_roles')->insert([ 'name' => 'Администратор', 'code' => 'administrator', ]); DB::table('user_roles')->insert([ 'name' => 'Модератор', 'code' => 'moderator', ]); DB::table('user_roles')->insert([ 'name' => 'Пользователь', 'code' => 'user', ]); DB::table('user_roles')->insert([ 'name' => 'Редактор контента', 'code' => 'content-manager', ]); } }

А также в файле database/seeds/DatabaseSeeder.php необходимо в методе run прописать использование класса UserRoleTableSeeder.

<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $this->call(UserRoleTableSeeder::class); } }

Таким образом команда php artisan db:seed  запустит метод run нужного нам класса и заполнит таблицу строками. А чтобы класс была найден необходимо через менеджер зависимостей composer переформировать пути для загрузки. Для этого необходимо выполнить команду composer dump-autoload .

В результате получим рабочий автолоад нашего класса и успешное выполнение команды.

image

Евгений

Специалист по разработке систем на современных PHP фреймворках.