# 应用程序结构

要充分使用 CodeIgniter，你需要了解应用程序的默认结构，以及可以根据你的应用需求进行哪些更改。

## 默认目录

一个全新的安装包含五个目录：

- app

- public

- writable

- tests

- vendor 或 system

每个目录都有非常具体的作用。

### app

app 目录是应用程序代码存放的地方。它自带一个默认的目录结构，适用于大多数应用程序。

以下目录构成了其基本内容：

    app/
        Config/         存储配置文件
        Controllers/    控制器决定程序流程
        Database/       存储数据库迁移和数据填充文件
        Filters/        存储可在控制器前后运行的过滤器类
        Helpers/        辅助函数存储独立函数的集合
        Language/       多语言支持从这里读取语言字符串
        Libraries/      存放不适合其他类别的有用类
        Models/         模型与数据库交互，代表业务实体
        ThirdParty/     可在应用中使用的第三方库
        Views/          视图组成要向客户端显示的 HTML

因为 app 目录已经具备命名空间，你可以根据应用程序的需要自由修改此目录的结构。

例如，你可能决定开始使用 Repository 模式和实体（Entities）来处理数据。在这种情况下，你可以将 Models 目录重命名为 Repositories，并添加一个新的 Entities 目录。

此目录中的所有文件都位于 `App` 命名空间下，尽管你可以通过修改 app/Config/Constants.php 来更改它。

### system

备注

如果你使用 Composer 安装 CodeIgniter，则 system 目录位于 vendor/codeigniter4/framework/system。

此目录存储了构成框架本身的文件。虽然你对如何使用应用程序目录有很高的灵活性，但绝不应修改 system 目录中的文件。相反，你应该通过扩展类或创建新类来提供所需的功能。

此目录中的所有文件都位于 `CodeIgniter` 命名空间下。

### public

public 目录存放了 Web 应用程序中可被浏览器访问的部分，防止对源代码的直接访问。

它包含主 .htaccess 文件、index.php 以及你添加的任何应用程序资源，如 CSS、JavaScript 或图片。

此目录旨在作为你网站的 "web root"，你的 Web 服务器将被配置为指向它。

### writable

此目录用于存放应用程序在其生命周期中可能需要写入的任何目录。这包括用于存储缓存文件、日志以及用户可能上传的文件的目录。

你应该将应用程序需要写入的其他任何目录都添加到这里。这允许你将其他主要目录保持为不可写状态，作为一种附加的安全措施。

### tests

此目录用于存放你的测试文件。_support 目录存放了各种模拟类和你在编写测试时可以使用的其他工具。

此目录无需转移到你的生产服务器上。

## 修改目录位置

如果你已经移动了任何主要目录，可以在 app/Config/Paths.php 内更改配置设置。

请阅读 管理你的应用程序。