【问题标题】:How do I write a routing aspect mapper for TYPO3 9 LTS如何为 TYPO3 9 LTS 编写路由方面映射器
【发布时间】:2018-10-29 20:09:34
【问题描述】:

我需要一个自定义方面映射器类来定义可选 get 参数的值。此参数包含一个带有额外数据的 cf_cache 标识符。但是这个参数会产生一个我不需要的 cHash 参数,也不想在 URL 中看到。

文档 (https://docs.typo3.org/typo3cms/extensions/core/Changelog/9.5/Feature-86365-RoutingEnhancersAndAspects.html) 说:

如果要求过于宽松,则在 URL 的末尾添加一个 URL 签名参数(“cHash”),该参数无法删除。

还有:

如果您确实要求永远不要使用 cHash 参数,请确保所有占位符都对页面段的结果(例如分页)有严格的定义,并随时构建自定义映射器。

功能描述仅说明如何在 ext_tables.php 中注册自定义增强器类,而不是如何使用自己的方面映射器:-(

很高兴,但如何?

【问题讨论】:

    标签: typo3 extbase


    【解决方案1】:

    解决方案很简单,但文档似乎有误。根据文档,应该使用 $GLOBALS['TYPO3_CONF_VARS']['SYS']['routing']['CustomPlugin'] 在 ext_tables.php 中注册自定义增强器。

    更新

    如果映射器在 ext_tables.php 中注册,它只有在您登录到 TYPO3 BE 时才有效。映射器似乎必须在 ext_localconf.php 中注册。然后它可以在不登录BE的情况下工作

    查看数组 $GLOBALS['TYPO3_CONF_VARS']['SYS']['routing'] 可以看到 Aspect 和 Enhancer 的注册位置:

    在 ext_tables.php 中注册映射器:

    // Custom Routing Aspects Mapper
    $GLOBALS['TYPO3_CONF_VARS']['SYS']['routing']['aspects']['IdentifierValueMapper'] = \VENDOR\Extension\Routing\Aspect\IdentifierValueMapper::class;
    

    方面类:

    <?php
    namespace VENDOR\Extension\Routing\Aspect;
    
    use TYPO3\CMS\Core\Routing\Aspect\StaticMappableAspectInterface;
    use TYPO3\CMS\Core\Site\SiteLanguageAwareTrait;
    
    class IdentifierValueMapper implements StaticMappableAspectInterface
    {
        use SiteLanguageAwareTrait;
    
        /**
         * {@inheritdoc}
         */
        public function generate(string $value): ?string
        {
            ...
            return $value !== false ? (string)$value : null;
        }
    
        /**
         * {@inheritdoc}
         */
        public function resolve(string $value): ?string
        {
            ...
            return isset($value) ? (string)$value : null;
        }
    
    }
    

    如果没有自定义映射器,我的 URL 总是(在我的情况下绝对没用/只有丑陋的)TYPO3 cHash 属性:

    /page/2/price/asc/03510890954e251e285104f156298e55952e4c7d?cHash=dd66994f041278f4c6bf2f7f64fb09e4

    现在我得到了没有 cHash 的 URL:

    /page/3/price/asc/ae636e66563e72d3e4f592173f328fecbee5e44f

    【讨论】:

    • (TYPO3 9.5.8): 在ext_tables.php 中注册 Custom Routing Aspects Mapper (如当前建议的那样)似乎使此方面映射器仅可用于登录(即后端)用户。以未登录用户(例如在隐身选项卡中)打开具有此自定义方面的路线将导致 TYPO 抛出“未找到方面”异常。我通过在AdditionalConfiguration.php 中注册方面解决了这个问题。这在概念上与 TYPO 核心的工作方式相同:github.com/TYPO3/TYPO3.CMS/blob/v9.5.8/typo3/sysext/core/…
    • 自定义方面映射器的注册需要在ext_localconf.php 中完成。 Reference
    • 我的链接也包含“cHash”参数的问题。我实现了一个自定义的“增强器”,现在还尝试实现一个自定义的“映射器”。但我仍然有“cHash”参数。无论我做什么,这都行不通。我可以在某处的自定义映射器上看到您的完整代码吗?谢谢
    • 嗨克劳斯,你可以在这里找到代码:gitlab.com/exotec/cardealer/-/tree/master/Classes/Routing/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多