Целевой класс [Modules\Orders\Database\Seeders\OrdersSeeder] не существует в Laravel Seed

Я работаю над проектом Laravel, в котором создал собственный модуль для обработки заказов. Мой класс сеялки OrdersSeeder находится в modules/Orders/database/seeders/OrdersSeeder.php. Вот мой класс сеялки:

<?php

namespace Modules\Orders\Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class OrdersSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        //
    }
}

Я упомянул эту сеялку в своем классе DatabaseSeeder, расположенном по адресу database/seeders/DatabaseSeeder.php, следующим образом:

<?php

namespace Database\Seeders;

use App\Models\User;
use Modules\Orders\Database\Seeders\OrdersSeeder;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     */
    public function run(): void
    {
        $this->call([
            OrdersSeeder::class
        ]);
    }
}

Однако когда я запускаю php artisan db:seed, я сталкиваюсь со следующей ошибкой:

Illuminate\Contracts\Container\BindingResolutionException 

Target class [Modules\Orders\Database\Seeders\OrdersSeeder] does not exist.

Я дважды проверил пространство имен и путь к файлу, и все кажется правильным. Что может быть причиной этой проблемы и как ее решить?

Путь к файлу и регистр пространства имен должны быть одинаковыми.

miken32 17.05.2024 20:08

это правильно, когда я создаю сеялку в другом месте, эта проблема возникает, если только я не создаю ее внутри database->seeders, она работает. но я хочу работать по пути, который я создал @miken32

Mohamed Raza 17.05.2024 20:12

@MohamedRaza, какой пакет вы используете для модульной архитектуры?

M-Khawar 17.05.2024 20:31

я не использую никакие пакеты @M-Khawar

Mohamed Raza 17.05.2024 20:36

@MohamedRaza Ваша программа раздачи приложений Laravel не имеет доступа к каталогу вашего модуля, вам придется добавить его в файл composer.json, позвольте мне написать мой ответ.

M-Khawar 17.05.2024 20:43

@MohamedRaza имя каталога ваших модулей написано строчными буквами? верно

M-Khawar 17.05.2024 20:49

да, @M-Khawar вот так modules/Orders

Mohamed Raza 17.05.2024 20:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
7
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваше приложение Laravel не может распознать ваш каталог modules. Если вы зайдете внутрь файла composer.json. Вы увидите примерно такой код:

 "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        },
}

Здесь вам нужно будет зарегистрировать свой modules каталог. то есть

 "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/",
            "Modules\\": "modules/",
        },
}

Примечание. Я полагаю, что имя вашего каталога modules написано строчными буквами.

После этих изменений выполните следующую команду:

 composer dump-autoload

Проблема с именем вашего каталога:

Я заметил ошибку в названии вашего каталога modules/Orders/database/seeders/OrdersSeeder.php. Должно быть modules/Orders/Database/Seeders/OrdersSeeder.php

php artisan dump-autoload команда не найдена, я запускал composer dump-autoload тоже изменился Molules -> Modules. все еще я получаю ту же проблему
Mohamed Raza 17.05.2024 20:58

@MohamedRaza да, верно

M-Khawar 17.05.2024 20:59
Class Modules\Orders\Database\Seeders\OrdersSeeder located in ./modules/Orders/database/seeders/OrdersSeeder.php does not comply with psr-4 autoloading standard. Skipping. я нашел это предупреждение, когда бежал composer dump-autoload
Mohamed Raza 17.05.2024 21:02

какое имя вы используете для файла OrdersSeeder. Это должен быть OrdersSeeder.php.

M-Khawar 17.05.2024 21:06

да, это OrdersSeeder.php

Mohamed Raza 17.05.2024 21:08

Я обновил свой ответ, пожалуйста, посмотрите раздел Issue with your directory naming: внизу моего ответа.

M-Khawar 17.05.2024 21:10

да, я видел это, и это работало. спасибо за помощь

Mohamed Raza 17.05.2024 21:14

Другие вопросы по теме