如何在TYPO3 Sitepackage Builder生成的站点包中集成Controller
不需要依赖Extension Builder,完全可以直接在已经生成好的sitepackage里手动添加Controller,全程只需要4步,不会改动你现有的站点包配置:
第一步:创建Controller类文件
先确认你站点包的根命名空间,直接查看扩展根目录下composer.json里的autoload配置即可,默认生成的sitepackage命名空间格式为你的厂商名\你的站点包名。在扩展的Classes/Controller/目录下新建你的Controller类,例如命名为CustomController.php,基础代码结构如下:<?php namespace Vendor\SitepackageName\Controller; use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; class CustomController extends ActionController { public function listAction() { // 写入业务逻辑,比如给模板传值 $this->view->assign('demoText', '测试输出'); } }注意把命名空间里的厂商名、站点包名替换成你自己项目里的实际值,和现有站点包的类命名空间保持一致即可。
第二步:注册插件配置
打开站点包根目录下的ext_localconf.php,保留原有代码,在文件末尾追加插件注册配置,把Controller和对应的动作绑定到系统中:\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( 'SitepackageName', 'CustomPlugin', [ \Vendor\SitepackageName\Controller\CustomController::class => 'list', ], // 无缓存动作列表,无表单交互需求可留空 [ \Vendor\SitepackageName\Controller\CustomController::class => '', ] );这里第一个参数填你的站点包名称(不带厂商前缀,大驼峰格式),第二个参数是自定义的插件标识,可按需命名。
第三步:接入后台内容元素选择器
打开站点包根目录下的ext_tables.php,保留原有代码,在末尾追加配置,让后台新建内容元素时可以选中你新增的插件:\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin( 'SitepackageName', 'CustomPlugin', '自定义功能插件' );第三个参数是后台显示的插件名称,可根据业务功能自定义。
第四步:创建对应模板文件
在站点包的Resources/Private/Templates/目录下,新建和Controller名称对应的文件夹(比如Controller名为CustomController,就新建Custom文件夹),在文件夹内创建和Action名称对应的Fluid模板文件,比如对应listAction就新建List.html,直接写前端模板代码即可,模板里可以直接读取Controller assign的变量:<div class="custom-plugin-wrapper"> <p>{demoText}</p> </div>
所有文件修改完成后,先在项目根目录执行
composer dumpautoload更新类自动加载,再到TYPO3后台维护模块清空系统缓存,新的Controller和插件就可以正常使用了。
这种手动添加的方式比用Extension Builder更灵活,不会覆盖你已经在站点包里写好的样式、模板、Typoscript配置,适合给已成型的站点包快速新增功能Controller。
内容的提问来源于stack exchange,提问作者RHu

