Я работаю над проектом 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.
Я дважды проверил пространство имен и путь к файлу, и все кажется правильным. Что может быть причиной этой проблемы и как ее решить?
это правильно, когда я создаю сеялку в другом месте, эта проблема возникает, если только я не создаю ее внутри database->seeders, она работает. но я хочу работать по пути, который я создал @miken32
@MohamedRaza, какой пакет вы используете для модульной архитектуры?
я не использую никакие пакеты @M-Khawar
@MohamedRaza Ваша программа раздачи приложений Laravel не имеет доступа к каталогу вашего модуля, вам придется добавить его в файл composer.json, позвольте мне написать мой ответ.
@MohamedRaza имя каталога ваших модулей написано строчными буквами? верно
да, @M-Khawar вот так modules/Orders






Ваше приложение 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. все еще я получаю ту же проблему
@MohamedRaza да, верно
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какое имя вы используете для файла OrdersSeeder. Это должен быть OrdersSeeder.php.
да, это OrdersSeeder.php
Я обновил свой ответ, пожалуйста, посмотрите раздел Issue with your directory naming: внизу моего ответа.
да, я видел это, и это работало. спасибо за помощь
Путь к файлу и регистр пространства имен должны быть одинаковыми.