用于自定义TYPO3扩展的RouteEnhancer:详细信息页面上的404

如何解决用于自定义TYPO3扩展的RouteEnhancer:详细信息页面上的404

我有一个自定义的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配置。

解决方法

也许您的数据系统文件夹不在根页面pagetree中。看到这里:https://forge.typo3.org/issues/91235

,

再次在routeenhancer设置中检查扩展和插件的值。特别是表示法,大写,小写并与registerPlugin参数进行比较。经验表明,这是犯大多数错误的地方:) ..我的错误

,

对于外部数据,我们需要一个自己的方面来返回值。试试这个

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;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-