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

TYPO3 12 ActionController注册插件时触发ServiceNotFoundException

注册TYPO3插件时出现ServiceNotFoundException错误

错误信息

ServiceNotFoundException: You have requested a non-existent service "MyVendorName\Typo3StarterSitepackage\Controller\DummyController"

环境信息

  • 系统:Windows + XAMPP
  • PHP版本:8.2
  • TYPO3版本:12.4.10

相关代码

控制器代码(DummyController.php)

<?php

namespace MyVendorName\Typo3StarterSitepackage\Controller;

use Psr\Http\Message\ResponseInterface;

class DummyController extends ActionController
{
    public function dummyListAction(): ResponseInterface
    {
        return $this->htmlResponse();
    }
}

仓库代码(DummyRepository.php)

<?php

namespace MyVendorName\Typo3StarterSitepackage\Domain\Repository;

use TYPO3\CMS\Extbase\Persistence\QueryInterface;

class DummyRepository extends Repository
{
    // this already has some default functions, like findAll(), inherited from the Repository class.
}

Services.yaml

services:
  # general settings
  _defaults:
    autowire: true
    autoconfigure: true
    public: false

  MyVendorName\Typo3StarterSitepackage\:
    resource: '../Classes/*'

ext_localconf.php

<?php

use MyVendorName\Typo3StarterSitepackage\Controller\DummyController;
use TYPO3\CMS\Extbase\Utility\ExtensionUtility;

defined('TYPO3') or die('Access denied.');
/***************
 * Add default RTE configuration
 */
// $GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['typo3_starter_sitepackage'] = 'EXT:typo3_starter_sitepackage/Configuration/RTE/Default.yaml';

/***************
 * PageTS
 */
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig('<INCLUDE_TYPOSCRIPT: source="FILE:EXT:typo3_starter_sitepackage/Configuration/TsConfig/Page/All.tsconfig">');

ExtensionUtility::configurePlugin(
    'typo3_starter_sitepackage',
    'DummyList',
    [DummyController::class => 'dummyList'],
);

排查与解决方案

  1. 补全父类引入
    控制器和仓库未引入对应的父类,导致类无法正确加载,服务无法被DI容器识别。

    • 修改控制器代码,添加父类引入:
      <?php
      
      namespace MyVendorName\Typo3StarterSitepackage\Controller;
      
      use Psr\Http\Message\ResponseInterface;
      use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; // 新增该行
      
      class DummyController extends ActionController
      {
          public function dummyListAction(): ResponseInterface
          {
              return $this->htmlResponse();
          }
      }
      
    • 修改仓库代码,添加父类引入:
      <?php
      
      namespace MyVendorName\Typo3StarterSitepackage\Domain\Repository;
      
      use TYPO3\CMS\Extbase\Persistence\QueryInterface;
      use TYPO3\CMS\Extbase\Persistence\Repository; // 新增该行
      
      class DummyRepository extends Repository
      {
          // 继承的默认方法如findAll()可用
      }
      
  2. 验证文件路径与命名空间匹配
    确认控制器文件路径为Classes/Controller/DummyController.php,仓库文件路径为Classes/Domain/Repository/DummyRepository.php,路径结构需与命名空间完全对应,注意大小写(TYPO3的PSR-4自动加载严格区分大小写,Windows文件系统不区分但需保持一致)。

  3. 清理TYPO3缓存
    在后端执行「清除全部缓存」,或通过命令行运行typo3 cache:flush,确保DI容器重新生成服务定义。

  4. 检查扩展密钥一致性
    确认ExtensionUtility::configurePlugin的第一个参数typo3_starter_sitepackage与ext_emconf.php中的extension_key完全一致。

  5. Windows环境额外检查

    • 扩展目录名称需与扩展密钥一致,避免大小写差异导致自动加载失败。
    • 禁用PHP的opcache或配置其自动重新加载文件,避免旧缓存类影响服务识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 01:45:00