Laravel自定义命令包无法运行
Laravel自定义Composer包命令未注册(make:ddd)
我创建了一个自定义的Laravel包,用于生成基于DDD的 CRUD结构。通过Composer安装包时一切正常,但Artisan命令无法被识别。
当我运行:
php artisan make:ddd Post
得到:
Command "make:ddd" is not defined.
该包似乎已经正确安装,但Laravel未注册该命令。
包结构
dddcrudgenerator/
├── src/
│ ├── Commands/
│ │ └── MakeDDDCRUDCommand.php
│ └── DDDCRUDGeneratorServiceProvider.php
├── stubs/
└── composer.json
服务提供者
namespace Rahamat\DDDCRUDGenerator;
use Illuminate\Support\ServiceProvider;
use Rahamat\DDDCRUDGenerator\Commands\MakeDDDCRUDCommand;
class DDDCRUDGeneratorServiceProvider extends ServiceProvider
{
public function register()
{
}
public function boot()
{
if ($this->app->runningInConsole()) {
$this->commands([
MakeDDDCRUDCommand::class
]);
}
}
}
Artisan命令
namespace Rahamat\DDDCRUDGenerator\Commands;
use Illuminate\Console\Command;
class MakeDDDCRUDCommand extends Command
{
protected $signature = 'make:ddd {name}';
protected $description = 'Generate simple CRUD (Model, Migration, Controller, Route)';
public function handle()
{
$name = $this->argument('name');
$this->info("Generating CRUD for: " . $name);
}
}
composer.json
{
"name": "rahamatj/dddcrudgenerator",
"description": "DDD CRUD generator",
"type": "library",
"license": "MIT",
"autoload": {
"psr-4": {
"Rahamat\\DDDCRUDgenerator\\": "src/"
}
},
"authors": [
{
"name": "Rahamat Jahan"
}
],
"minimum-stability": "stable",
"require": {},
"extra": {
"laravel": {
"providers": [
"Rahamat\\DDDCRUDgenerator\\DDDCRUDgeneratorServiceProvider"
]
}
}
}
我尝试过的办法
- 通过Composer安装包
- 运行:
composer dump-autoload
php artisan cache:clear
php artisan config:clear
- 确认该包出现在
vendor/
然而,make:ddd 命令在运行时仍未显示:
php artisan list
问题
是什么原因会导致Laravel包中的命令即使服务提供者和命令类看起来定义正确,仍然没有注册?
我的 命名空间、PSR-4自动加载配置,或服务提供者注册 有问题吗?
解决方案
看起来是命名空间大小写不匹配。
请先检查并修正以下内容:
composer dump-autoload
php artisan optimize:clear
php artisan package:discover
php artisan list | grep ddd
确保以下完全匹配:
*Rahamat\DDDCRUDGenerator* 在autoload.psr-4中
Rahamat\DDDCRUDGenerator\DDDCRUDGeneratorServiceProvider 在extra.laravel.providers中
namespace Rahamat\DDDCRUDGenerator; 在你的提供者和命令文件中
现在你把 DDDCRUDGenerator 和 DDDCRUDgenerator 混用,所以Laravel可能永远找不到提供者,这意味着命令也不会被注册
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。