Slim PHP容器配置求助:新手入门遇阻,求可运行基础示例
Slim PHP容器基础可运行示例(修复你的代码问题)
你的代码有两个核心问题导致容器无法正常工作:
- 注册
HomeController时尝试获取未定义的view服务,直接抛出依赖缺失错误 - 控制器构造函数需要
ContainerInterface实例,但你注册时却传入了不存在的$view,类型不匹配
以下是修复后可直接运行的完整示例,包含容器的基础使用逻辑:
步骤1:确保依赖安装
执行命令安装必备包:
composer require slim/slim php-di/php-di slim/psr7
项目目录结构(和你的保持一致)
--api --src --Controllers --HomeController.php --public --.htaccess --index.php .htaccess
修改后的public/index.php代码
use DI\Container; use Psr\Http\Message\ResponseInterface as Response; use Slim\Factory\AppFactory; use api\Controllers\HomeController; use Psr\Container\ContainerInterface; require __DIR__ . '/../vendor/autoload.php'; // 初始化PHP-DI容器 $container = new Container(); // 给Slim应用绑定容器 AppFactory::setContainer($container); $app = AppFactory::create(); $app->setBasePath('/api'); // 注册HomeController到容器 // 闭包中注入容器实例,匹配控制器构造函数的参数需求 $container->set(HomeController::class, function (ContainerInterface $container) { return new HomeController($container); }); // 路由绑定控制器方法 $app->get('/', [HomeController::class, 'home']); $app->run();
修改后的src/Controllers/HomeController.php代码
namespace api\Controllers; use Psr\Container\ContainerInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; class HomeController { private $container; // 构造函数接收容器实例,后续可通过容器获取其他服务 public function __construct(ContainerInterface $container) { $this->container = $container; } public function home(ServerRequestInterface $request, ResponseInterface $response, array $args): ResponseInterface { $response->getBody()->write('Hello from Slim Container!'); return $response; } }
容器基础逻辑说明
- 容器初始化:
new Container()创建PHP-DI容器实例,用来统一管理所有服务的依赖关系 - 服务注册:通过
$container->set()把控制器(或其他服务)注册到容器,闭包负责实例化对象并注入所需依赖 - 自动解析:当路由调用控制器时,Slim会自动从容器中获取已注册的控制器实例,无需手动实例化
- 依赖扩展:后续如果需要添加视图、数据库连接等服务,只需在容器中注册对应服务,然后在控制器中通过
$this->container->get('服务名')即可获取
验证运行
启动本地PHP内置服务器:
cd api/public php -S localhost:8000
访问http://localhost:8000/api/,即可看到返回的Hello from Slim Container!
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

