TYPO3 v11:如何从路由中删除控制器和哈希

问题描述 投票:0回答:1

自定义 TYPO3 扩展的路径如下所示:

https://example.com/events/detail/event-title/test-event/?tx_eventmanager_eventdisplay%5Bcontroller%5D=Event&cHash=f32fdcaf3d016b8b89861dfab5a0558d

我希望它们看起来像: https://example.com/events/detail/event-title/test-event/

routeEnhancer 配置如下所示:

routeEnhancers:
  EventDetail:
    type: Plugin
    routePath: '/event-title/{event}'
    namespace: tx_eventmanager_eventdisplay
    defaults:
      controller: 'Event'
    aspects:
      event:
        type: PersistedAliasMapper
        tableName: tx_eventmanager_domain_model_event
        routeFieldName: path_segment

TYPO3版本是11.5.34

完全相同的配置在另一个扩展(在另一个站点)中产生了所需的结果,当前的扩展是几年前从该扩展中分叉出来的。即使没有“默认值”,它也能工作,我添加了“默认值”,因为看起来它们可能会有所帮助。我尝试使用 type: Extbase 来代替,但由于某种原因,这对任何一个扩展都不起作用。

因此,两个扩展(或环境)之间似乎存在一些微小但至关重要的差异,但两者都有很大差异 - 我应该注意什么?或者我可以通过在routeEnhancer中进行一些额外的配置来修复它吗?

我已经尝试使用 ChatGPT 缩小范围,但这并没有多大帮助。 我尝试了它提供的不同的routeEnhancer配置,但这并没有改善它。 根据它的建议我进行了比较:

  • 数据库和索引中的“path_segment”字段,
  • TCA 中的“路径段”
  • ext_localconf.php 中的“configurePlugin”块

所有这些在两个扩展中都是相同的。 除此之外,它的建议非常广泛。

routes typo3 url-routing typo3-11.x
1个回答
1
投票

看来,您正在谈论

Extbase Plugin
并希望用说话的 url 替换 extbase 请求获取参数。

使用站点配置来定义路由是一个好的开始,也是这样做的正确位置。但是,您使用了“错误”的路由增强器。罪魁祸首是,TYPO3 知道两种类型的插件 - AbstractPlugins(基于 Pi42/旧版)和

Extbase Plugins
- 并且您需要为每种插件类型使用正确的路由增强器。

该文档解释了 Extbase 插件路由增强器 [1],您可能需要阅读它以获取进一步的解释,特别是方面部分和可能性。

粗略的开始应该使用以下路由配置:

routeEnhancers:
  EventDetail:
    type: Extbase
    extension: Eventmanager
    plugin: EventDisplay
    routes:
      - routePath: '/event-title/{event}'
        _controller: 'Event::show'
        _arguments:
          event: 'event'
    aspects:
      event:
        type: PersistedAliasMapper
        tableName: tx_eventmanager_domain_model_event
        routeFieldName: path_segment

注意:始终对路由路径使用前缀,并避免多个插件重复/使用相同的前缀 - 或者使用 limitToPage ,只要同一页面上不存在两个具有相同前缀的插件即可。并且您应该使用routePath前缀,如果使用tree lige slug路径(默认),它不太可能是子页面的slug。

确实不建议对 extbase 插件使用插件 Routeenhanver,因为它会满足 Extbase 的特定要求。

其他选项

如果它确实不是 extbase 插件,并且您想使用

Plugin
类型增强器,那么还有其他罪魁祸首。首先,该类型不支持方面参数映射。

所以也许以下内容适合您:

routeEnhancers:
  EventDetail:
    type: Plugin
    routePath: '/event-title/{event}'
    namespace: tx_eventmanager_eventdisplay
    requirements:
      event: '[a-zA-Z0-9]+'
    aspects:
      event:
        type: PersistedAliasMapper
        tableName: tx_eventmanager_domain_model_event
        routeFieldName: path_segment

命名空间(完整的插件名称)和 不应与其他插件重复且是唯一的 - 并且与用于注册的扩展/插件名称相匹配。如果是这种类型,请参阅 [2] 了解说明。

© www.soinside.com 2019 - 2024. All rights reserved.