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

TYPO3 v13后端模块Extbase路由问题:请求未初始化报错

TYPO3 v13 Extbase后端模块路由错误解决方案

问题根源

  1. $this->request 属性不再自动初始化:TYPO3 v13中,Extbase ActionController 的类属性 $request 已被废弃,不再自动注入请求对象。直接访问 $this->request 会触发未初始化错误,官方推荐通过动作方法注入的 ServerRequestInterface $request 参数获取请求。
  2. 后端链接缺失必要参数:后端模块请求必须携带CSRF令牌 moduleToken,否则会导致上下文不完整;同时旧的Extbase路由格式(如formmailsadmin.FormMailController_downloadCsv)不再适配v13的Symfony路由规范。

解决步骤

1. 替换 $this->request 为方法注入参数

修改控制器动作,将所有 $this->request 的调用替换为方法参数中的 $request:

#[AsController]
class FormMailController extends ActionController
{
    public function listAction(ServerRequestInterface $request): ResponseInterface
    {
        debug($request); // 使用方法注入的请求对象,而非$this->request
    }

    public function downloadCsvAction(ServerRequestInterface $request): ResponseInterface
    {
        debug($request); // 同样使用方法注入的请求对象
    }
}

2. 正确构建后端模块链接

  • 获取并传递CSRF令牌:从当前请求中提取 moduleToken,并加入路由参数:
// 在listAction中获取moduleToken
$moduleToken = $request->getAttribute('moduleToken');

// 构建下载按钮链接
$downloadCsvButton = GeneralUtility::makeInstance(GenericButton::class);
$downloadCsvButton
    ->setTag('a')
    ->setHref((string)$uriBuilder->buildUriFromRoute(
        // 使用你在Backend/Routes.php中定义的路由名称
        'formmailsadmin_download_csv',
        [
            'moduleToken' => $moduleToken,
            // 如需传递业务参数,在此添加
        ]
    ))
    ->setTitle('TITLE')
    ->setLabel('LABEL')
    ->setShowLabelText(true)
    ->setIcon($this->iconFactory->getIcon('actions-download'));
  • 配置Symfony风格路由:在 Configuration/Backend/Routes.php 中注册后端模块路由:
return [
    'formmailsadmin_list' => [
        'path' => '/formmailsadmin/list',
        'target' => \YourVendor\YourExtension\Controller\FormMailController::class . '::listAction',
    ],
    'formmailsadmin_download_csv' => [
        'path' => '/formmailsadmin/download-csv',
        'target' => \YourVendor\YourExtension\Controller\FormMailController::class . '::downloadCsvAction',
    ],
];

3. 确认控制器服务注册

在 Configuration/Services.yaml 中注册控制器,确保Extbase能正确识别:

services:
  _defaults:
    autowire: true
    autoconfigure: true
    public: false

  YourVendor\YourExtension\Controller\:
    resource: '../Classes/Controller/'
    tags:
      - { name: 'backend.controller' }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:25:58