Composer怎么安装Slim框架 微型框架快速入门教程【实操】

6次阅读

composer create-project slim/slim-skeleton my-app 可快速安装 Slim 4,需 php ≥ 8.1 且启用 ext-pdo、ext-mbstring;项目需空目录,内置 nyholm/psr7 和路由结构,运行 php -S localhost:8000 -t public 即可访问 “Hello World”。

Composer怎么安装Slim框架 微型框架快速入门教程【实操】

直接用 composer create-project 命令就能装好 Slim,不需要手动下载或配置 autoload——但必须确认 PHP 版本 ≥ 8.1,且 ext-pdoext-mbstring 已启用,否则项目跑不起来。

create-project 初始化 Slim 4 项目

Slim 官方推荐方式是基于 slim/slim-skeleton 模板创建,它已预置 PSR-7 实现(nyholm/psr7)和路由中间件结构:

composer create-project slim/slim-skeleton my-app

执行后会自动安装 Slim 4.x(当前稳定版)、依赖的 PSR 标准库、以及一个带 public/index.php 的最小可运行结构。注意:my-app 目录不能预先存在,否则命令会失败。

  • 如果只想装 Slim 核心(无骨架),改用 composer require slim/slim:^4.13,但得自己写入口文件和 PSR-7 实现绑定
  • Slim 5 已发布,但默认 skeleton 仍指向 v4;如需 v5,显式指定: composer create-project slim/slim-skeleton:dev-develop my-app
  • windows 下若提示 proc_open(): fork failed,大概率是 WSL 或 docker 环境未正确挂载,换 CMD/PowerShell 重试

验证安装是否成功:启动内置服务器

进到项目目录后,直接用 PHP 内置服务器跑起来:

cd my-app php -S localhost:8000 -t public

访问 http://localhost:8000,应看到 “Hello World” 页面。关键点在于:

  • -t public 必须指定,因为路由入口在 public/index.php,而非项目根目录
  • 如果页面空白或报 class 'PsrHttpMessageServerRequestInterface' not found,说明 PSR-7 实现没加载,检查 vendor/autoload.php 是否被正确引入
  • 部分旧版 XAMPP/MAMP 自带 PHP 可能缺 ext-curl,导致 Composer 安装中途卡住,建议用 官方 Windows PHP 包 替代

写第一个路由时要注意的依赖绑定

Slim 4+ 不再自带 PSR-7 实现,靠第三方包提供请求/响应对象。骨架中默认用了 nyholm/psr7,所以你写路由时可以直接用原生接口

$app->get('/hello/{name}', function ($request, $response, $args) {     $name = $args['name'];     $response->getBody()->write("Hello, $name");     return $response; });

但如果你删了 nyholm/psr7 改用 guzzlehttp/psr7,就得额外加一句 ->withBody(...) 处理响应体,因为 Guzzle 的 Stream 默认不可写。Slim 不强制绑定某一个实现,但骨架选型决定了你代码的简洁程度。

  • 别在 index.php 里直接 new Request —— 所有请求对象由容器注入,手动构造会导致 getUri()getParsedBody() 等方法行为异常
  • 如果用 laravel Valet,需确保 valet park 在项目父目录执行,否则 my-app.test 无法解析到 public/
  • 调试时想看完整请求头,用 $request->getHeaders(),不是 $request->getHeaderLine() —— 后者只返回合并后的字符串,丢失多值信息

真正容易卡住的地方不在安装命令本身,而在于 PHP 扩展缺失、Web 服务器文档根路径配错、或者误以为 Slim 会自动处理 POST 表单解析——它不会,$request->getParsedBody() 只对 application/jsonapplication/x-www-form-urlencoded 生效,上传文件得自己读 $_FILES

text=ZqhQzanResources