# Kylin Modules 配置管理

## 1. 配置管理概述

Kylin Modules 支持模块的配置管理，每个模块可以有自己的配置文件，用于存储模块的配置信息。

## 2. 配置文件创建

### 2.1 基本配置文件

在模块的 `config` 目录中创建配置文件：

**blog.php**：博客模块配置文件

```php
<?php

return [
    /*
    |--------------------------------------------------------------------------
    | 博客模块配置
    |--------------------------------------------------------------------------
    |
    | 博客模块的配置信息
    |
    */

    /*
    |--------------------------------------------------------------------------
    | 博客标题
    |--------------------------------------------------------------------------
    |
    | 博客的标题
    |
    */
    'title' => 'My Blog',

    /*
    |--------------------------------------------------------------------------
    | 博客描述
    |--------------------------------------------------------------------------
    |
    | 博客的描述
    |
    */
    'description' => 'This is my blog',

    /*
    |--------------------------------------------------------------------------
    | 博客作者
    |--------------------------------------------------------------------------
    |
    | 博客的作者
    |
    */
    'author' => 'Admin',

    /*
    |--------------------------------------------------------------------------
    | 博客每页显示数量
    |--------------------------------------------------------------------------
    |
    | 博客列表每页显示的文章数量
    |
    */
    'per_page' => 10,

    /*
    |--------------------------------------------------------------------------
    | 博客评论是否需要审核
    |--------------------------------------------------------------------------
    |
    | 控制评论是否需要审核
    |
    */
    'comment_approval' => true,

    /*
    |--------------------------------------------------------------------------
    | 博客分类
    |--------------------------------------------------------------------------
    |
    | 博客的分类列表
    |
    */
    'categories' => [
        'tech' => '技术',
        'life' => '生活',
        'travel' => '旅行',
    ],
];
```

## 3. 配置加载

### 3.1 配置加载配置

在 `config/modules.php` 文件中配置配置加载：

```php
'config' => [
    'enabled' => true,
    'path' => 'config',
],
```

### 3.2 服务提供者中的配置加载

在模块的服务提供者中加载配置：

```php
public function boot()
{
    // 加载模块配置
    $this->mergeConfigFrom(__DIR__.'/../config/blog.php', 'blog');

    // 发布模块配置
    $this->publishes([
        __DIR__.'/../config/blog.php' => config_path('blog.php'),
    ], 'blog-config');
}
```

## 4. 配置访问

### 4.1 使用 config() 函数

使用 `config()` 函数访问模块配置：

```php
// 获取博客标题
$title = config('blog.title');

// 获取博客描述
$description = config('blog.description');

// 获取博客每页显示数量
$perPage = config('blog.per_page');

// 获取博客分类
$categories = config('blog.categories');
```

### 4.2 使用 Config 门面

使用 `Config` 门面访问模块配置：

```php
use Illuminate\Support\Facades\Config;

// 获取博客标题
$title = Config::get('blog.title');

// 获取博客描述
$description = Config::get('blog.description');

// 设置博客标题
Config::set('blog.title', 'New Blog Title');

// 检查配置是否存在
$exists = Config::has('blog.title');
```

## 5. 配置发布

### 5.1 发布配置文件

在模块的服务提供者中配置配置发布：

```php
public function boot()
{
    // 发布模块配置
    $this->publishes([
        __DIR__.'/../config/blog.php' => config_path('blog.php'),
    ], 'blog-config');
}
```

### 5.2 运行发布命令

运行配置发布命令：

```bash
php artisan vendor:publish --tag=blog-config
```

## 6. 环境变量

### 6.1 配置环境变量

在模块的配置文件中使用环境变量：

```php
return [
    'title' => env('BLOG_TITLE', 'My Blog'),
    'description' => env('BLOG_DESCRIPTION', 'This is my blog'),
    'author' => env('BLOG_AUTHOR', 'Admin'),
    'per_page' => env('BLOG_PER_PAGE', 10),
    'comment_approval' => env('BLOG_COMMENT_APPROVAL', true),
];
```

### 6.2 设置环境变量

在 `.env` 文件中设置环境变量：

```env
# 博客模块配置
BLOG_TITLE=My Blog
BLOG_DESCRIPTION=This is my blog
BLOG_AUTHOR=Admin
BLOG_PER_PAGE=10
BLOG_COMMENT_APPROVAL=true
```

## 7. 配置缓存

### 7.1 生成配置缓存

为了提高性能，可以生成配置缓存：

```bash
php artisan config:cache
```

### 7.2 清除配置缓存

当配置发生变化时，需要清除配置缓存：

```bash
php artisan config:clear
```

## 8. 常见问题

### 8.1 配置未加载

**问题**：模块配置未加载
**解决方案**：
1. 检查配置文件是否存在
2. 检查服务提供者中的配置加载是否正确
3. 检查配置缓存是否已清除

### 8.2 配置访问错误

**问题**：模块配置访问错误
**解决方案**：
1. 检查配置键是否正确
2. 检查配置文件是否正确
3. 检查配置缓存是否已清除

### 8.3 环境变量未生效

**问题**：模块环境变量未生效
**解决方案**：
1. 检查环境变量是否正确设置
2. 检查环境变量文件是否存在
3. 检查配置缓存是否已清除

### 8.4 配置发布失败

**问题**：模块配置发布失败
**解决方案**：
1. 检查配置文件是否存在
2. 检查服务提供者中的配置发布是否正确
3. 检查文件权限是否正确

## 9. 最佳实践

1. **配置组织**：为每个模块创建独立的配置文件
2. **命名规范**：使用清晰、描述性的配置键
3. **默认值**：为配置项设置合理的默认值
4. **环境变量**：使用环境变量管理敏感配置
5. **配置发布**：提供配置发布功能，方便用户自定义配置
6. **配置缓存**：在生产环境中使用配置缓存，提高性能
7. **文档**：为模块配置编写文档，方便用户使用

## 10. 总结

Kylin Modules 提供了灵活的配置管理功能，支持模块的配置创建和自动加载。通过合理的配置设计，可以实现模块的灵活配置和自定义，提高代码的可维护性和可扩展性。
