唯一推荐方式是用composer create-project slim/slim-skeleton初始化项目,它自动集成nyholm/psr7、public/index.php入口、psr-4自动加载及错误中间件,避免手动require slim/slim导致的class not found或空白页问题。

直接用 composer create-project slim/slim-skeleton 初始化项目,是唯一能避开 90% 环境问题的集成方式。手动 require slim/slim 后自己拼 index.php,几乎必然触发 Class "PsrHttpMessageServerRequestInterface" not found 或空白页——这不是你代码错了,是 PSR-7 实现、自动加载、入口路径三者没对齐。
为什么不能只 composer require slim/slim
Slim 4+ 彻底解耦了核心与 PSR-7 实现,slim/slim 包本身不提供任何请求/响应类。它只依赖接口,但不实现接口。
- 装完
slim/slim后立刻报Class "NyholmPsr7ServerRequest" not found?说明你漏了 PSR-7 实现包 - 用
laminas/laminas-diactoros?PHP 8.2+ 下会触发Deprecated: Creation of dynamic property,且 Slim 5 已明确弃用 - 想最小化?
nyholm/psr7是当前事实标准:轻量、无扩展依赖、完整实现 PSR-17 工厂接口 - 必须显式绑定工厂:
SlimFactoryAppFactory::create()才会自动查找已安装的 PSR-17 实现;否则$app = new SlimApp()会失败
composer create-project 都干了什么
它不是“生成个模板”,而是把 Slim 运行所需的全部契约一次性配平:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 自动拉取
nyholm/psr7(非slim/psr7,后者是兼容层,非必需) - 生成
public/index.php入口,并确保vendor/autoload.php被正确引入 - 预置
src/目录 +"autoload": {"psr-4": {"App\": "src/"}},避免类找不到 - 自带错误中间件启用逻辑:
$app->addErrorMiddleware(true, true, true),开发阶段不静默失败 - 目录结构强制隔离:Web 根目录必须是
public/,php -S localhost:8000 -t public缺一不可
微服务或 Docker 场景下的 Composer 集成陷阱
多个 Slim 服务共享 vendor 或跨镜像部署时,PSR 接口版本冲突是静默故障主因:
-
psr/http-message必须统一锁死为^1.0,Slim 4 不兼容 v2.x - Alpine 容器中执行
composer install报Permission denied?别chown -R,改用su-exec www-data composer install - 用 PHP-DI 容器?必须调用
SlimFactoryAppFactory::createFromContainer($container),否则构造函数注入不会生效 - 生产环境务必关掉
displayErrorDetails:暴露堆栈=暴露路径、配置、甚至数据库凭证(若日志误打)
最常被跳过的一步,是确认 public/index.php 是否真被 Web 服务器路由到——Nginx 的 try_files $uri $uri/ /index.php?$query_string 和 Apache 的 .htaccess 重写规则,缺一不可。骨架里都写了,但删了 public/ 或挪动入口文件后,没人再检查这个。










