TYPO3 12:如何将TypoScript常量设置为整数类型?
TYPO3 v12升级:解决PageType参数类型不匹配问题
问题场景与错误
把TYPO3从v11升级到v12后,Fluid模板里的AJAX筛选表单报错:
TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder::setTargetPageType(): Argument #1 ($targetPageType) must be of type int, string given
问题出在定义的AJAX页面类型常量,传递到Fluid时是字符串类型,但TYPO3 v12要求pageType必须是整数。
相关代码
Fluid模板代码
<f:form action="list" method="GET" name="overwriteDemand" pageType="{settings.tx_t8_references_ajaxpage}">
TypoScript常量
plugin.tx_t8references { ajaxPage = 427592 }
TypoScript配置
plugin.tx_t8references { settings { tx_t8_references_ajaxpage = {$plugin.tx_t8references.ajaxPage} } }
解决办法
1. 在TypoScript配置中强制转整数
直接在配置里把常量值转为整数,这样传递到Fluid时就是int类型:
plugin.tx_t8references { settings { tx_t8_references_ajaxpage = INT tx_t8_references_ajaxpage.value = {$plugin.tx_t8references.ajaxPage} } }
或者用更简洁的写法:
plugin.tx_t8references.settings.tx_t8_references_ajaxpage = intval({$plugin.tx_t8references.ajaxPage})
2. 在Fluid模板中直接转换类型
如果不想改TypoScript,也可以在模板里直接转类型:
<!-- 方式1:用intval转换 --> <f:form action="list" method="GET" name="overwriteDemand" pageType="{(int)settings.tx_t8_references_ajaxpage}"> <!-- 方式2:用format.number过滤器去除格式(确保无分隔符) --> <f:form action="list" method="GET" name="overwriteDemand" pageType="{settings.tx_t8_references_ajaxpage -> f:format.number(decimalSeparator: '', thousandsSeparator: '')}">
3. 在控制器代码中处理
如果是在Extbase控制器里生成URL,也可以在代码里转类型后再传给UriBuilder:
$pageType = (int)$this->settings['tx_t8_references_ajaxpage']; $uri = $this->uriBuilder->setTargetPageType($pageType)->build();
内容的提问来源于stack exchange,提问作者Paradonix
相关产品推荐
相关产品推荐

