Slim 4 Skeleton 项目教程
1. 项目的目录结构及介绍
Slim 4 Skeleton 项目的目录结构如下:
my-app-name/
├── app/
│ ├── Action/
│ ├── Domain/
│ ├── Middleware/
│ └── Renderer/
├── cache/
├── config/
├── logs/
├── public/
│ └── index.php
├── src/
├── templates/
├── tests/
├── vendor/
├── .env
├── .env.example
├── .gitignore
├── composer.json
├── composer.lock
├── docker-compose.yml
└── README.md
目录介绍:
app/
: 包含应用程序的核心代码,如控制器、领域逻辑、中间件和渲染器。cache/
: 用于存储缓存文件。config/
: 包含应用程序的配置文件。logs/
: 用于存储日志文件。public/
: 包含公共可访问的文件,如index.php
启动文件。src/
: 包含自定义的源代码。templates/
: 包含视图模板文件。tests/
: 包含测试代码。vendor/
: 包含 Composer 安装的依赖包。.env
: 环境变量配置文件。.env.example
: 环境变量配置文件的示例。.gitignore
: Git 忽略文件配置。composer.json
: Composer 依赖管理文件。composer.lock
: Composer 锁定文件。docker-compose.yml
: Docker 配置文件。README.md
: 项目说明文档。
2. 项目的启动文件介绍
Slim 4 Skeleton 项目的启动文件位于 public/index.php
。该文件是应用程序的入口点,负责初始化应用程序并处理请求。
<?php
use DI\ContainerBuilder;
use Slim\Factory\AppFactory;
require __DIR__ . '/../vendor/autoload.php';
// 创建依赖注入容器
$containerBuilder = new ContainerBuilder();
// 添加容器配置
$containerBuilder->addDefinitions(__DIR__ . '/../config/container.php');
// 构建容器
$container = $containerBuilder->build();
// 设置容器到 AppFactory
AppFactory::setContainer($container);
// 创建应用程序实例
$app = AppFactory::create();
// 添加中间件
$middleware = require __DIR__ . '/../config/middleware.php';
$middleware($app);
// 添加路由
$routes = require __DIR__ . '/../config/routes.php';
$routes($app);
// 运行应用程序
$app->run();
启动文件的主要功能:
- 引入 Composer 自动加载文件。
- 创建依赖注入容器并添加配置。
- 设置容器到 AppFactory。
- 创建应用程序实例。
- 添加中间件。
- 添加路由。
- 运行应用程序。
3. 项目的配置文件介绍
Slim 4 Skeleton 项目的配置文件主要位于 config/
目录下。
主要配置文件:
container.php
: 定义依赖注入容器的配置。middleware.php
: 定义应用程序的中间件。routes.php
: 定义应用程序的路由。
container.php
示例:
<?php
use function DI\create;
return [
// 定义依赖
'settings' => function () {
return require __DIR__ . '/settings.php';
},
// 其他依赖定义
];
middleware.php
示例:
<?php
use Slim\App;
return function (App $app) {
// 添加中间件
$app->addBodyParsingMiddleware();
$app->addRoutingMiddleware();
$app->addErrorMiddleware(true, true, true);
};
routes.php
示例:
<?php
use Slim\App;
return function (App $app) {
// 定义路由
$app->get('/', \App\Action\HomeAction::class);
// 其他