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

Slim 4.11应用报错:Callable Quiz\Controller\QuizController::index()不存在

Slim 4应用报错:Callable Quiz\Controller\QuizController::index() 不存在

错误信息

( ! ) Fatal error: Uncaught RuntimeException: Callable Quiz\Controller\QuizController::index() does not exist in /var/www/html/vendor/slim/slim/Slim/CallableResolver.php on line 138
( ! ) RuntimeException: Callable Quiz\Controller\QuizController::index() does not exist in /var/www/html/vendor/slim/slim/Slim/CallableResolver.php on line 138

环境与配置

  • PHP版本:8.1
  • Slim版本:4.11
  • 自动加载规则(composer.json):
"autoload": {
    "psr-4": {"Quiz\\": "source/"}
}
  • 项目结构说明:控制器文件位于source/Trivia/Controller/QuizController.php

控制器代码

<?php

declare(strict_types=1);

namespace Quiz\Trivia\Controller;

use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Slim\Http\Response;


final class QuizController
{

    private $container;

    public function __construct(ContainerInterface $container)
    {
        $this->container = $container;
    }

    public function index(ServerRequestInterface $request, Response $response, array $args): ResponseInterface
    {
        return $this->container->get('views')->render(
            $response,
            'index.twig'
        );
    }
}

路由配置(routes.php)

<?php

declare(strict_types=1);

use Quiz\Trivia\Controller\QuizController;

return [
    'index' => [
        'type' => 'get',
        'path' => '/',
        'class' => QuizController::class . ':index'
    ]
];

当前操作

已通过$app->map(...)在index.php中加载路由配置,尝试过社区旧方案但未解决,需要定位问题并修复。


解决步骤

1. 定位核心问题

错误提示寻找Quiz\Controller\QuizController::index(),但实际控制器的完整命名空间是Quiz\Trivia\Controller\QuizController,两者不匹配。这说明路由解析时可能错误拼接了命名空间,或者路由注册逻辑存在问题。

2. 刷新自动加载

先执行composer命令确保自动加载规则生效:

composer dump-autoload

3. 修正路由注册逻辑

确保路由中使用完整正确的控制器命名空间:

  • 如果是直接注册路由,改用标准写法:
// index.php中注册路由的示例
use Quiz\Trivia\Controller\QuizController;

$app->get('/', [QuizController::class, 'index']);
  • 如果是遍历routes.php的配置加载,检查遍历代码是否错误修改了class字段的值,确保最终传递给$app->map()的Callable是Quiz\Trivia\Controller\QuizController:index。

4. 验证依赖容器配置

如果使用依赖容器管理控制器实例,确保容器能正确解析该控制器:

// 容器配置示例(如container.php)
$container->set(Quiz\Trivia\Controller\QuizController::class, function ($container) {
    return new Quiz\Trivia\Controller\QuizController($container);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:45:36