必须用 composer create-project slim/slim-skeleton 安装,因其预置 PSR-7 实现、入口文件、目录结构和自动加载;直接 require slim/slim 会导致 Class not found 或空白页等环境问题。

用 composer create-project slim/slim-skeleton 是唯一推荐的安装方式,不是“一种选择”,而是避免踩坑的起点。 直接 require slim/slim 只装核心库,90% 的新手会在 5 分钟内卡在 Class "Psr\Http\Message\ServerRequestInterface" not found 或空白页面上——这不是你代码写错了,是骨架没搭好。
为什么必须用 create-project 而不是 require
Slim 4+ 不再自带 PSR-7 实现、不生成入口文件、不配自动加载规则。Skeleton 模板已预置:nyholm/psr7、public/index.php、src/ 目录结构、composer.json 中的 PSR-4 映射和启动脚本。你少写 12 行配置,就少掉进 3 个坑。
-
create-project会自动创建空目录my-app;若该目录已存在,命令直接失败——这是保护机制,不是 bug -
require slim/slim后,你得手动补composer require nyholm/psr7,再手动写public/index.php,再确认autoload.php被引入,顺序错一步就报错 - Slim 5 已发布,但
slim/slim-skeleton默认仍是 v4;要装 v5,显式加版本:composer create-project slim/slim-skeleton:dev-develop my-app
php -S 启动时 -t public 缺一不可
访问 http://localhost:8000 却看到 404 或 “No input file specified”,大概率是没指定 Web 根目录。Slim 的路由入口固定在 public/index.php,PHP 内置服务器默认以当前目录为根,不走重写规则。
- 正确命令:
php -S localhost:8000 -t public(-t后必须跟public,不能是.或public/少斜杠) - 如果删了
public/目录、或把index.php移到根目录下运行php -S localhost:8000,Slim 的路由将完全失效——它依赖 PSR-7 Request 对象由public/index.php构造 - Apache/Nginx 用户也需确保重写规则生效:
.htaccess在public/下且mod_rewrite已启用;Nginx 需配try_files $uri $uri/ /index.php?$query_string
常见错误现象与对应检查点
不是所有报错都来自代码。以下现象几乎全是环境或结构问题:
-
Class "Slim\Factory\AppFactory" not found→ 你只运行了composer require slim/slim,没装 skeleton,AppFactory在slim/slim-skeleton里,不在核心包中 - 页面空白,无报错,HTTP 状态码 200 →
public/index.php没被访问到,检查-t public是否遗漏,或浏览器是否发到了根目录而非public/ -
proc_open(): fork failed(Windows)→ 多见于 WSL 或 Docker 终端,换 CMD 或 PowerShell 重试;不是 Slim 问题,是 PHP 进程创建失败 -
Call to undefined method Psr\Http\Message\ResponseInterface::withJson()→ 用了$response->withJson()但没装slim/psr7或nyholm/psr7不支持该方法(它只提供基础接口),改用$response->getBody()->write(json_encode([...]))
真正麻烦的不是“怎么装”,而是“装完之后你以为它跑起来了,其实请求根本没进 Slim”。只要 public/index.php 是唯一入口、-t public 不漏、PHP 版本 ≥ 8.1(Slim 5)或 ≥ 7.4(Slim 4),其他都是细节。骨架省掉的那十几行配置,就是你今晚能不能看到 Hello World 的分水岭。










