Laravel自定义CRUD包报错:Target class [Eraufi\Src\GenerateCRUDCommand]不存在
Laravel CRUD包安装后dump-autoload报错:Target class [Eraufi\Src\GenerateCRUDCommand]不存在
我开发了一款Laravel CRUD生成包并发布到Packagist,通过composer require eraufi/crud安装后,执行composer dump-autoload时出现错误:Target class [Eraufi\Src\GenerateCRUDCommand] does not exist。相关代码文件如下:
项目app\Console\Kernel.php代码:
namespace App\Console; use Eraufi\Src\GenerateCRUDCommand; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; class Kernel extends ConsoleKernel { protected $commands = [ GenerateCRUDCommand::class, ]; }
包内vendor\eraufi\crud\composer.json代码:
{ "name": "eraufi/crud", "description": "A package for generating CRUD operations in Laravel", "version": "0.0.1", "authors": [ { "name": "Mohufi", "email": "ed@gg.com" } ], "require": { "php": "^8.1", "laravel/framework": "^10.10" }, "autoload": { "psr-4": { "eraufi\\crud\\": "src/" } } }
包内vendor\eraufi\crud\src\GenerateCRUDCommand.php代码:
<?php namespace Eraufi\Crud; use Illuminate\Console\Command; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Str; use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Log; class GenerateCRUDCommand extends Command { protected $signature = 'crud:generate {model}'; protected $description = 'Generate CRUD operations for a model based on the database table'; public function handle() { $model = $this->argument('model'); $tableName = Str::snake($model); $question = [ 'generateView' => $this->confirm('Generate Views?'), 'isEducationl' => $this->confirm('Are you Using this for Educational Purposes? (Adds Comments)'), ]; $columns = Schema::getColumnListing($tableName); $this->requestCodes($model, $columns, $question); $this->controllerCodes($model, $columns, $question); $this->routeCodes($model, $question); if ($question['generateView']) { $this->indexViewCodes($model, $columns); $this->createViewCodes($model); $this->createEditCodes($model); $this->createShowCodes($model); } } }
错误原因及修复步骤
1. 命名空间与PSR-4映射完全不匹配
包的composer.json中PSR-4配置为小写的eraufi\\crud\\,但命令类使用的是大写开头的Eraufi\Crud命名空间,同时项目Kernel.php错误引入了不存在的Eraufi\Src\GenerateCRUDCommand路径,三者完全错位。
修复操作:
- 修改包内
composer.json的PSR-4映射,保持命名空间大小写一致:
"autoload": { "psr-4": { "Eraufi\\Crud\\": "src/" } }
- 修改项目
app\Console\Kernel.php中的引入语句,匹配命令类的实际命名空间:
// 替换原错误引入 use Eraufi\Crud\GenerateCRUDCommand;
2. 更新自动加载规则并重新发布包
- 在包的根目录执行以下命令,更新自动加载文件:
composer dump-autoload
- 更新包的版本号(如改为
0.0.2)后重新发布到Packagist,触发平台重新抓取包内容。 - 在Laravel项目中更新包:
composer update eraufi/crud
3. 验证命令注册结果
执行以下命令查看命令列表,确认crud:generate是否存在:
php artisan list
内容的提问来源于stack exchange,提问作者ERaufi
相关产品推荐
相关产品推荐

