You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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();
    
  • 路由配置使用控制器类的数组写法:
    $app->get('/home', [Controllers\HomeController::class, 'home']);
    
    此时容器会自动解析控制器的构造函数依赖,不再传入null
  • 如果不需要容器依赖,直接删除控制器中接收ContainerInterface的构造函数即可(这也是你注释代码后能正常访问的原因)

内容的提问来源于stack exchange,提问作者TaylorR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:12:25