Slim 4控制器调用失败及容器注入参数为空问题求助
Slim 4 控制器路由与依赖注入问题解决
1. 「Callable Controllers\HomeController::home() does not exist」错误排查
- 验证控制器命名空间:
src/Controllers/HomeController.php顶部必须声明namespace Controllers;,且类名与文件名严格一致(类名HomeController对应文件名HomeController.php) - 检查Composer自动加载配置:在
composer.json中添加PSR-4自动加载规则,确保Composer能找到控制器类:"autoload": { "psr-4": { "Controllers\\": "src/Controllers/" } } - 执行
composer dump-autoload刷新自动加载缓存,使配置生效
2. 「构造函数ContainerInterface参数传入null」错误排查
Slim 4 移除了Slim 3中自动向控制器注入容器的特性,要实现依赖注入需手动配置:
- 确保已安装依赖注入组件:执行
composer require php-di/php-di(或其他PSR-11兼容容器) - 配置Slim使用自定义容器:在应用初始化时,将PHP-DI容器作为Slim的容器实例,示例:
use DI\Container; use Slim\Factory\AppFactory; require __DIR__ . '/../vendor/autoload.php'; $container = new Container(); AppFactory::setContainer($container); $app = AppFactory::create(); - 路由配置使用控制器类的数组写法:
此时容器会自动解析控制器的构造函数依赖,不再传入null$app->get('/home', [Controllers\HomeController::class, 'home']); - 如果不需要容器依赖,直接删除控制器中接收
ContainerInterface的构造函数即可(这也是你注释代码后能正常访问的原因)
内容的提问来源于stack exchange,提问作者TaylorR
相关产品推荐
相关产品推荐

