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

使用Slim框架出现Callable不存在的RuntimeException问题求助

解决Slim 4中Callable不存在的错误

问题分析

报错Callable TestController::showBlank() does not exist的核心原因有两个:

  • TestController类未被Composer自动加载,框架找不到这个类
  • Slim 4默认容器不支持自动解析带构造函数依赖的控制器(你的TestController依赖ContainerInterface)

解决方案

步骤1:确保控制器被自动加载

当前你的TestController.php在项目根目录,Composer默认不会自动加载根目录下的类,需要修改composer.json添加自动加载规则:

修改后的composer.json:

{
  "require": {
    "slim/slim": "^4.11",
    "slim/psr7": "^1.6",
    "slim/twig-view": "^3.3",
    "slim/http": "^1.3"
  },
  "autoload": {
    "classmap": ["TestController.php"]
  }
}

执行命令更新自动加载缓存:

composer dump-autoload

步骤2:处理控制器的依赖注入(二选一)

方案A:配置PHP-DI容器支持依赖注入

Slim 4推荐使用PHP-DI作为依赖容器,先安装依赖:

composer require php-di/php-di

修改index.php,替换默认容器:

<?php
use Slim\Factory\AppFactory;
use DI\Container;

require './vendor/autoload.php';

// 初始化PHP-DI容器
$container = new Container();
AppFactory::setContainer($container);
$app = AppFactory::create();

$app->get('/', [TestController::class, 'showBlank']);

$app->run();
方案B:简化控制器,去掉容器依赖

如果不需要在控制器中使用容器,可以直接移除构造函数:

修改后的TestController.php:

<?php
use Psr\Http\Message\ServerRequestInterface;
use Slim\Http\Interfaces\ResponseInterface;

class TestController
{
    public function showBlank(ServerRequestInterface $request, ResponseInterface $response, array $args): ResponseInterface
    {
        // 可选:添加响应内容,验证是否正常运行
        $response->getBody()->write('Hello Slim!');
        return $response;
    }
}

验证

完成上述修改后,重新访问根路径/,应该能正常返回响应(如果用了方案B,会看到"Hello Slim!")。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:55:31