讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在 TYPO3 8.7中通过GET请求调用控制器动作并返回JSON

老丽吖_9388

老丽吖_9388

发布时间:2026-03-26 20:16:03

|

983人浏览过

|

来源于php中文网

原创

如何在 TYPO3 8.7中通过GET请求调用控制器动作并返回JSON

本文详解在typo3 8.7中为extbase扩展创建无模板的json接口:包括正确构造get url、配置专用ajax页面、禁用html输出、生成合法chash,以及使用postman安全调试的完整流程。

本文详解在typo3 8.7中为extbase扩展创建无模板的json接口:包括正确构造get url、配置专用ajax页面、禁用html输出、生成合法chash,以及使用postman安全调试的完整流程。

在TYPO3中暴露一个纯JSON接口(如供Postman或前端AJAX调用),不能仅依赖echo json_encode()——必须遵循Extbase的调度机制与TYPO3的缓存/安全规则。以下是以test_extension为例的标准化实现方案。

✅ 正确构造GET请求URL

Extbase插件的路由参数需严格遵循命名规范:tx_{extension_key}_{plugin_name}[controller] 和 tx_{extension_key}_{plugin_name}[action]。假设你的扩展键为 test_extension,插件名称(pluginName)为 TestPlugin(通常在ext_localconf.php中注册,如\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(...)),则完整URL格式为:

https://yoursite.com/?id=123&tx_test_extension_testplugin[controller]=TestRequest&tx_test_extension_testplugin[action]=test

⚠️ 注意事项:

  • id=123 是页面UID(即挂载了该插件的TYPO3页面ID),不是你扩展的业务参数;
  • 若需传递自定义参数(如?uid=456),应写作 tx_test_extension_testplugin[uid]=456;
  • cHash是必需的:TYPO3 8.7默认启用cHash校验以防止参数篡改。直接拼接URL会因缺少cHash导致404或空响应。切勿手动计算——应通过Fluid视图助手或PHP API生成。

✅ 推荐实践:创建专用“Ajax页面”并配置JSON输出

为避免干扰主站布局、确保纯净JSON响应,建议创建独立页面专用于API调用:

  1. 新建页面(如命名为 Ajax API),在页属性 → “类型” 中选择 “Shortcut” → “External URL” 或更推荐:“Standard” + 隐藏于菜单;

  2. 在该页面上插入你的插件(Backend → 页面模块 → 编辑内容 → 添加插件);

  3. 配置页面类型为JSON:进入该页面的“常规”属性 → “类型”下拉选 “JSON”(若未显示,请确认已安装fluid_styled_content且config.tx_extbase.features.skipDefaultArguments = 1等基础配置正常);

  4. 关键:禁用所有非JSON输出
    在页面TSConfig或站点配置(config.yaml)中添加:

    page.config {
      disableAllHeaderCode = 1
      xhtml_cleaning = 0
      no_cache = 1
    }

    并在插件的TypoScript setup中强制清除HTML包装:

    Json Repair Kit
    Json Repair Kit

    使用 Node.js 评估修复格式错误的 JSON,自动纠正尾随逗号、单引号、未加引号的键等常见问题,实现文件规范化。

    下载
    plugin.tx_testextension_testplugin {
      view {
        templateRootPaths.0 = EXT:test_extension/Resources/Private/Templates/
        partialRootPaths.0 = EXT:test_extension/Resources/Private/Partials/
        layoutRootPaths.0 = EXT:test_extension/Resources/Private/Layouts/
      }
      settings {
        # 确保不渲染任何Fluid模板
      }
    }

✅ 控制器代码优化(安全 & 兼容)

原始写法存在隐患:直接echo绕过TYPO3响应生命周期,可能被缓冲、压缩或注入HTML头。应改用ResponseInterface(TYPO3 8.7支持):

use Psr\Http\Message\ResponseInterface;
use TYPO3\CMS\Core\Http\JsonResponse;

class TestRequestController extends ActionController
{
    public function testAction(): ResponseInterface
    {
        $data = [
            'test' => 123,
            'timestamp' => time(),
            'extension' => 'test_extension'
        ];
        return new JsonResponse($data);
    }
}

✅ 优势:自动设置Content-Type: application/json、处理字符编码、兼容PSR-7标准,且与cHash校验无缝协同。

✅ 使用Postman调试步骤

  1. 访问你配置好的Ajax页面URL(如 https://yoursite.com/ajax-api/),先在浏览器打开一次,观察地址栏是否自动追加了&cHash=xxxx——这是TYPO3生成的有效哈希;

  2. 复制完整URL(含cHash),粘贴至Postman的GET请求栏;

  3. 发送请求,验证响应状态码为200,响应体为格式化JSON;

  4. 后续开发中,可通过 Fluid标签动态生成带cHash的URL:

    <f:uri.action controller="TestRequest" action="test" extensionName="test_extension" pluginName="TestPlugin" pageUid="123" />

⚠️ 常见错误排查

现象 原因 解决方案
返回空白页或404 URL中缺失cHash,或id指向了未挂载插件的页面 检查插件是否真正在目标页面上;用浏览器首次访问获取有效cHash
JSON被HTML包裹 未禁用disableAllHeaderCode或页面类型非JSON 强制设置page.config.disableAllHeaderCode = 1,确认页面类型为JSON
cHash不匹配报错 参数变动后未刷新cHash(如启用了静态缓存) 清除所有缓存(var/cache/ + 后台“清除全部缓存”),或临时设$GLOBALS['TYPO3_CONF_VARS']['FE']['pageTypeNoCache'] = [100];(100为JSON页面类型ID)

掌握此模式后,你可快速为任意Extbase动作提供RESTful接口,兼顾TYPO3安全性与前端调用灵活性。

热门AI工具

更多
PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

11504

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

6641

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2175

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

4208

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

4934

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

3871

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

5577

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4362

2023.11.13

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn