Laravel自定义命令包无法运行

后端开发 2026-07-11

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; 在你的提供者和命令文件中

现在你把 DDDCRUDGeneratorDDDCRUDgenerator 混用,所以Laravel可能永远找不到提供者,这意味着命令也不会被注册

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章