# Kylin Modules 命令行工具

## 1. 命令行工具概述

Kylin Modules 提供了丰富的命令行工具，用于管理模块的创建、安装、启用、禁用和卸载等操作。

## 2. 命令列表

### 2.1 模块创建命令

```bash
php artisan module:create {module} [--force]
```

**参数说明**：
- `{module}`：模块名称
- `--force`：强制创建，覆盖已存在的模块

**功能**：创建新的模块，包括目录结构、配置文件、服务提供者、路由文件、控制器、模型和视图等。

**示例**：

```bash
php artisan module:create Blog
php artisan module:create Blog --force
```

### 2.2 模块安装命令

```bash
php artisan module:install {module}
```

**参数说明**：
- `{module}`：模块名称

**功能**：安装模块，注册服务提供者，加载路由、视图和配置等。

**示例**：

```bash
php artisan module:install Blog
```

### 2.3 模块启用命令

```bash
php artisan module:enable {module}
```

**参数说明**：
- `{module}`：模块名称

**功能**：启用模块，注册服务提供者，加载路由、视图和配置等。

**示例**：

```bash
php artisan module:enable Blog
```

### 2.4 模块禁用命令

```bash
php artisan module:disable {module}
```

**参数说明**：
- `{module}`：模块名称

**功能**：禁用模块，移除服务提供者，卸载路由、视图和配置等。

**示例**：

```bash
php artisan module:disable Blog
```

### 2.5 模块卸载命令

```bash
php artisan module:uninstall {module} [--force]
```

**参数说明**：
- `{module}`：模块名称
- `--force`：强制卸载，不提示确认

**功能**：卸载模块，删除模块的所有文件和配置信息。

**示例**：

```bash
php artisan module:uninstall Blog
php artisan module:uninstall Blog --force
```

### 2.6 模块列表命令

```bash
php artisan module:list
```

**功能**：列出所有模块及其状态。

**示例**：

```bash
php artisan module:list
```

### 2.7 模块状态命令

```bash
php artisan module:status {module}
```

**参数说明**：
- `{module}`：模块名称

**功能**：显示模块的状态信息。

**示例**：

```bash
php artisan module:status Blog
```

## 3. 命令实现

### 3.1 命令类结构

命令类继承自 `Illuminate\Console\Command` 类：

```php
<?php

namespace Kylin\Modules\Console\Commands;

use Illuminate\Console\Command;
use Kylin\Modules\ModuleManager;

class ModuleCreateCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'module:create {module} {--force}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Create a new module';

    /**
     * The module manager instance.
     *
     * @var \Kylin\Modules\ModuleManager
     */
    protected $moduleManager;

    /**
     * Create a new command instance.
     *
     * @param  \Kylin\Modules\ModuleManager  $moduleManager
     * @return void
     */
    public function __construct(ModuleManager $moduleManager)
    {
        parent::__construct();
        $this->moduleManager = $moduleManager;
    }

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        $module = $this->argument('module');
        $force = $this->option('force');

        try {
            $this->moduleManager->createModule($module, $force);
            $this->info("Module {$module} created successfully.");
            return 0;
        } catch (\Exception $e) {
            $this->error($e->getMessage());
            return 1;
        }
    }
}
```

### 3.2 命令注册

在 `Kylin\Modules\Providers\ModulesServiceProvider` 中注册命令：

```php
public function register()
{
    // 注册命令
    $this->commands([
        \Kylin\Modules\Console\Commands\ModuleCreateCommand::class,
        \Kylin\Modules\Console\Commands\ModuleInstallCommand::class,
        \Kylin\Modules\Console\Commands\ModuleEnableCommand::class,
        \Kylin\Modules\Console\Commands\ModuleDisableCommand::class,
        \Kylin\Modules\Console\Commands\ModuleUninstallCommand::class,
        \Kylin\Modules\Console\Commands\ModuleListCommand::class,
        \Kylin\Modules\Console\Commands\ModuleStatusCommand::class,
    ]);
}
```

## 4. 命令执行流程

### 4.1 模块创建流程

1. **参数检查**：检查模块名称是否符合规范
2. **目录检查**：检查模块目录是否已存在
3. **创建目录**：创建模块的目录结构
4. **创建文件**：创建模块的配置文件、服务提供者、路由文件、控制器、模型和视图等
5. **注册服务**：注册模块的服务提供者
6. **输出结果**：输出创建结果

### 4.2 模块安装流程

1. **参数检查**：检查模块名称是否符合规范
2. **目录检查**：检查模块目录是否存在
3. **注册服务**：注册模块的服务提供者
4. **加载资源**：加载模块的路由、视图和配置等
5. **输出结果**：输出安装结果

### 4.3 模块启用流程

1. **参数检查**：检查模块名称是否符合规范
2. **目录检查**：检查模块目录是否存在
3. **启用服务**：启用模块的服务提供者
4. **加载资源**：加载模块的路由、视图和配置等
5. **输出结果**：输出启用结果

### 4.4 模块禁用流程

1. **参数检查**：检查模块名称是否符合规范
2. **目录检查**：检查模块目录是否存在
3. **禁用服务**：禁用模块的服务提供者
4. **移除资源**：移除模块的路由、视图和配置等
5. **输出结果**：输出禁用结果

### 4.5 模块卸载流程

1. **参数检查**：检查模块名称是否符合规范
2. **目录检查**：检查模块目录是否存在
3. **确认操作**：提示用户确认卸载操作
4. **禁用模块**：禁用模块
5. **删除文件**：删除模块的所有文件
6. **清理配置**：清理模块的配置信息
7. **输出结果**：输出卸载结果

## 5. 自定义命令

### 5.1 创建自定义命令

在模块的 `Console/Commands` 目录中创建自定义命令：

```php
<?php

namespace Modules\Blog\Console\Commands;

use Illuminate\Console\Command;

class BlogPublishCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'blog:publish';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Publish blog posts';

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        // 命令逻辑
        $this->info('Blog posts published successfully.');
        return 0;
    }
}
```

### 5.2 注册自定义命令

在模块的服务提供者中注册自定义命令：

```php
public function register()
{
    // 注册命令
    $this->commands([
        \Modules\Blog\Console\Commands\BlogPublishCommand::class,
    ]);
}
```

## 6. 常见问题

### 6.1 命令未找到

**问题**：模块命令未找到
**解决方案**：
1. 检查命令是否正确输入
2. 检查模块是否已安装
3. 检查命令是否已注册

### 6.2 命令执行失败

**问题**：模块命令执行失败
**解决方案**：
1. 检查模块名称是否正确
2. 检查模块目录是否存在
3. 检查文件权限是否正确
4. 检查命令逻辑是否正确

### 6.3 命令参数错误

**问题**：模块命令参数错误
**解决方案**：
1. 检查命令参数是否正确
2. 检查命令参数的类型是否正确
3. 检查命令参数的数量是否正确

### 6.4 命令输出错误

**问题**：模块命令输出错误
**解决方案**：
1. 检查命令的输出逻辑是否正确
2. 检查命令的错误处理是否正确
3. 检查命令的返回值是否正确

## 7. 最佳实践

1. **命令命名**：使用清晰、描述性的命令名称
2. **参数设计**：合理设计命令参数，提高命令的易用性
3. **错误处理**：完善命令的错误处理，提高命令的稳定性
4. **输出信息**：提供清晰、有用的输出信息，提高命令的可读性
5. **命令注册**：正确注册命令，确保命令可以被执行
6. **测试**：为命令编写测试，确保命令的正确性
7. **文档**：为命令编写文档，方便其他开发者使用

## 8. 总结

Kylin Modules 提供了丰富的命令行工具，支持模块的创建、安装、启用、禁用和卸载等操作。通过命令行工具，可以方便地管理模块的生命周期，提高开发效率和代码的可维护性。
