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

TYPO3 11中如何在不强制依赖Dashboard的情况下注册仪表盘widget

TYPO3 非强制依赖Dashboard扩展注册Widget解决方案

核心逻辑是让Widget相关服务仅在Dashboard扩展已安装的场景下才被注册加载,具体操作步骤如下:

  • 第一步:调整扩展服务自动扫描配置
    修改Configuration/Services.yaml,将Widget类所在目录排除在全局自动扫描范围外,避免未装Dashboard扩展时系统自动扫描到Widget类,触发依赖接口不存在的报错:
    services:
      _defaults:
        autowire: true
        autoconfigure: true
        public: false
    
      Vendor\YourExtension\:
        resource: '../Classes/*'
        # 新增排除规则,将Widget目录排除在全局自动扫描之外
        exclude: '../Classes/Dashboard/Widget/*'
    
  • 第二步:按条件注册Widget服务
    两种方案二选一即可:
    • 方案1:用YAML条件注册
      直接在Configuration/Services.yaml中补充带条件的Widget注册规则,仅当WidgetInterface存在时才生效:
      # 接上述基础服务配置
      Vendor\YourExtension\Dashboard\Widget\YourCustomWidget:
        tags:
          - name: dashboard.widget
            identifier: 'your_extension_custom_widget'
            widgetGroups: 'general'
        # 仅当Dashboard扩展的WidgetInterface存在时才注册该服务
        when@available:
          class: TYPO3\CMS\Dashboard\Widgets\WidgetInterface
      
    • 方案2:用PHP服务配置注册(更灵活)
      新建Configuration/Services.php文件,通过PHP代码判断接口是否存在后再注册服务:
      <?php
      declare(strict_types=1);
      
      use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
      use TYPO3\CMS\Dashboard\Widgets\WidgetInterface;
      use Vendor\YourExtension\Dashboard\Widget\YourCustomWidget;
      
      return static function (ContainerConfigurator $configurator): void {
          $services = $configurator->services();
          if (interface_exists(WidgetInterface::class)) {
              $services->set(YourCustomWidget::class)
                  ->tag('dashboard.widget', [
                      'identifier' => 'your_extension_custom_widget',
                      'widgetGroups' => 'general'
                  ]);
          }
      };
      
  • 第三步:确认composer.json配置
    保持你原有的suggests配置即可,不要将typo3/cms-dashboard放入require节点:
    {
      "suggest": {
        "typo3/cms-dashboard": "安装后可使用本扩展提供的自定义Dashboard小部件"
      }
    }
    

完成以上配置后,未安装Dashboard扩展的环境下不会加载Widget相关的任何代码,不会抛出接口不存在的报错,安装后自动生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:45:05