我有一个自定义的extbase扩展,它可以查询ReST服务中的只读数据,以列表和详细信息视图的形式显示它们。 TYPO3表中没有数据。 这些网址是由realURL处理的,直到TYPO3 8都可以正常工作。
现在我正在更新到TYPO3 9.5.21,我无法获取routeEnhancer配置来使此扩展正常工作。我设法为TYPO3 9上的详细信息视图获取完全相同的URL,但是详细信息视图返回404错误:“ TYPO3 \ CMS \ Core \ Error \ Http \ PageNotFoundException:请求的页面不存在”
这是config.yaml:
...
routeEnhancers:
...
News:
...
CDP_Gemeinden:
type: Extbase
# Pages containing list/detail-plugin
limitToPages:
- 43336
- 11082
# From registerPlugin @ ext_tables.php
# Extension key is dvt_cdp
extension: DvtCdp
# From configurePlugin @ ext_localconf.php
plugin: CdpGemeinden
routes:
- { routePath: '/gemeinde/{gemoestat}/', _controller: 'Gemeinden::show', _arguments: {'gemoestat': 'gemoestat'} }
defaultController: 'Gemeinden::search'
requirements:
gemoestat: '\d+'
aspects:
gemoestat:
type: StaticRangeMapper
start: '70100'
end: '70999'
在第43336和11082页上放置了可处理列表视图和详细信息视图的插件。 “ gemoestat”是城市的唯一ID。到详细视图的链接是在列表视图模板中创建的:
<f:link.action arguments="{gemoestat:gemeinde.gemoestat}" action="show">
此URL在TYPO3 9(和TYPO 8)上有效,而没有routeEnhancer:
.../?tx_dvtcdp_cdpgemeinden%5Baction%5D=show&tx_dvtcdp_cdpgemeinden%5Bcontroller%5D=Gemeinden&tx_dvtcdp_cdpgemeinden%5Bgemoestat%5D=70701&cHash=8cabee37a20f804e94e2af1e9f2ce02d
这是可在TYPO3 8上使用的URL,现在如果我激活routeEnhancer并同时导致404错误,则会生成该URL:
.../gemeinden/gemeinde/70701/
有什么想法吗?在没有routeEnhancer的情况下,细节视图可以正常工作,因此我认为扩展不是问题,而是routeEnhancer配置。
答案 0 :(得分:0)
也许您的数据系统文件夹不在根页面pagetree中。看到这里:https://forge.typo3.org/issues/91235
答案 1 :(得分:0)
再次在routeenhancer设置中检查扩展和插件的值。特别是表示法,大写,小写并与registerPlugin参数进行比较。经验表明,这是犯大多数错误的地方:) ..我的错误
答案 2 :(得分:0)
对于外部数据,我们需要一个自己的方面来返回值。试试这个
config.yaml
routeEnhancers:
CDPGemeinden:
type: Extbase
extension: DvtCdp
plugin: CdpGemeinden
routes:
- routePath: 'gemeinde/{gemoestat}/'
_controller: 'Gemeinden::show'
_arguments:
gemoestat: 'gemoestat'
aspects:
gemoestat:
type: GemoestatMapper
EXT:dvt_cdp / Classes / Routing / Aspect / GemoestatMapper.php
<?php
namespace Dvt\Cdp\Routing\Aspect;
use TYPO3\CMS\Core\Routing\Aspect\StaticMappableAspectInterface;
/**
* Aspect that maps external gemoestat unique ID
*/
class GemoestatMapper implements StaticMappableAspectInterface
{
/**
* @inheritDoc
*/
public function generate(string $value): ?string
{
return $value;
}
/**
* @inheritDoc
*/
public function resolve(string $value): ?string
{
return isset($value) ? (string)$value : null;
}
}
EXT:dvt_cdp / ext_localconf.php
// Add routing aspect
$GLOBALS['TYPO3_CONF_VARS']['SYS']['routing']['aspects']['GemoestatMapper'] =
\Dvt\Cdp\Routing\Aspect\GemoestatMapper::class;