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

Slim+PHP-DI容器路由报错:调用bool类型的get()方法

问题分析与修复方案

核心问题本质

你碰到的「调用bool类型的get()方法」致命错误,根源是routes.php第20行调用$container->get()时,容器返回了false而非预期的服务实例。这种情况一般是服务注册失败、依赖初始化出错,或者容器本身未正确配置导致的。

具体排查修复步骤

1. 定位routes.php第20行的问题代码

先找到第20行的代码,大概率是类似这样的写法:

$controller = $container->get(HotelBaseController::class);
  • 确认类名的命名空间、大小写完全正确,拼写错误会导致容器找不到服务,进而返回异常值。
  • 如果这里是直接调用某个变量的get()方法(比如$something->get()),那要确认$something是不是被错误赋值成了布尔值。

2. 检查dependencies.php的服务注册逻辑

重点看HotelBaseController对应的服务定义,比如:

$container->set(HotelBaseController::class, function ($c) {
    // 这里的逻辑如果返回false,就会导致后续调用出错
    $dbConn = $c->get(PDO::class);
    if (!$dbConn) {
        return false; // 错误:应该抛出异常或修复依赖问题,而非返回bool
    }
    return new HotelBaseController($dbConn);
});
  • 确保服务定义的闭包最终返回的是类实例,绝对不能返回布尔值/空值。
  • 检查该服务依赖的其他服务(比如数据库连接)是否能正常初始化,前置依赖失败会导致当前服务返回异常值。

3. 验证Slim与PHP-DI的集成正确性

确认index.php里的容器初始化逻辑正确,必须把PHP-DI容器传递给Slim应用:

use DI\Container;
use Slim\Factory\AppFactory;

require __DIR__ . '/vendor/autoload.php';

// 初始化PHP-DI容器
$container = new Container();
// 加载依赖配置
require __DIR__ . '/dependencies.php';

// 关键:将容器绑定到Slim
AppFactory::setContainer($container);
$app = AppFactory::create();

// 加载路由
require __DIR__ . '/routes.php';

// 开启错误中间件,方便调试
$app->addErrorMiddleware(true, true, true);

$app->run();

如果容器没有正确绑定到Slim,路由里获取的容器可能不是PHP-DI实例,导致get()行为异常。

4. 调试输出快速定位

在routes.php第20行之前添加调试代码,直接查看服务获取结果:

$targetService = $container->get(HotelBaseController::class);
var_dump($targetService);
exit;

如果输出是bool(false),直接去dependencies.php里排查该服务的初始化逻辑,找到返回false的分支并修复(比如替换成抛出异常,或者修复依赖的问题)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:55:07