未执行 TYPO3 v9 上具有 StaticMappableAspectInterface 的自定义路由方面

Posted

技术标签:

【中文标题】未执行 TYPO3 v9 上具有 StaticMappableAspectInterface 的自定义路由方面【英文标题】:Custom Routing Aspect with StaticMappableAspectInterface on TYPO3 v9 not executed 【发布时间】:2020-11-19 09:53:53 【问题描述】:

我必须为我自己的 TYPO3 扩展创建一个自定义路由方面,它使用来自 JSON(不在 TYPO3 数据库中)的 URL 中的参数来将 cHash 删除到 URL 中以用于 SEO。

所以我关注 documentation 并将 CustomValueMapper.php 添加到 myExtension/Classes/Routing/Aspect 中

将下面的代码放入这个文件中用于测试目的:

<?php
namespace VENDOR\MyExtension\Routing\Aspect;

use TYPO3\CMS\Core\Routing\Aspect\StaticMappableAspectInterface;
use TYPO3\CMS\Extbase\Utility\DebuggerUtility;

class CustomValueMapper implements StaticMappableAspectInterface


    /**
     * @inheritdoc
     */
    public function generate(string $value): ?string
    
        DebuggerUtility::var_dump('tagadadada');
        $value = 'fr-00002032';
        return $value;
        // die($value);
        // return $value !== false ? (string)$value : null;
    

    /**
     * @inheritdoc
     */
    public function resolve(string $value): ?string
    
        DebuggerUtility::var_dump('tagadadodo');
        $value = 'fr-00002032';
        return $value;
        // die($value);
        // return isset($value) ? (string)$value : null;
    


在我添加的 ext_localconf.php 中:

$GLOBALS['TYPO3_CONF_VARS']['SYS']['routing']['aspects']['MyExtensionCustomValueMapper'] = \VENDOR\MyExtension\Routing\Aspect\CustomValueMapper::class;

如果我调试到我的控制器:

DebuggerUtility::var_dump($GLOBALS['TYPO3_CONF_VARS']['SYS']['routing'], 'mapper');

我可以看到我在 ext_localconf.php 中声明的自定义方面

aspects => array(7 items)
  LocaleModifier => 'TYPO3\CMS\Core\Routing\Aspect\LocaleModifier' (44 chars)
  PersistedAliasMapper => 'TYPO3\CMS\Core\Routing\Aspect\PersistedAliasMapper' (50 chars)
  PersistedPatternMapper => 'TYPO3\CMS\Core\Routing\Aspect\PersistedPatternMapper' (52 chars)
  StaticRangeMapper => 'TYPO3\CMS\Core\Routing\Aspect\StaticRangeMapper' (47 chars)
  StaticValueMapper => 'TYPO3\CMS\Core\Routing\Aspect\StaticValueMapper' (47 chars)
  MyExtensionCustomValueMapper => 'VENDOR\MyExtension\Routing\Aspect\CustomValueMapper' (47 chars)

进入我添加的站点配置(进入 config.yaml 文件)

...
routeEnhancers:
  MyCustomPlugin:
    type: Extbase
    extension: myextension
    plugin: pi1
    routes:
      -  routePath: '/', _controller: 'myController::search' 
      -  routePath: 'myParam', _controller: 'myController::show', _arguments: 'myParam': 'myParam' 
    defaultController: 'myController::search'
    aspect:
      myParam:
         type: MyExtensionCustomValueMapper

所以 URL 用 routePath 重写,看起来像

http://localhost:8080/mytestpage/fr-00002032?cHash=11a51779bcff3bc03283087ea6ff9aa1

但我不想要 cHash 参数。

实际上就像我的 CustomValueMapper.php 文件没有被读取一样。如果我在其中添加一个很大的语法错误,什么都不会发生。没有错误显示,什么都没有。

【问题讨论】:

【参考方案1】:

进入站点配置(进入config.yaml文件), 如果您有多个参数发送到控制器 所有参数都必须映射,否则缺少的参数将“隐藏”在 chash 参数中。 例如:

routeEnhancers:
MyCustomPlugin:
type: Extbase
extension: myextension
plugin: myplugin
routes:
  - routePath: '/'
    _controller: 'myController::search'
  - routePath: '/myParam'
    _controller: 'myController::show'
    _arguments: 
      myParam1: 'myParam1'
      myParam2: 'myParam2'
      myParam3: 'myParam3'  
defaultController: 'myController::search'
aspect:
  myParam1:
     type: MyExtensionCustomValueMapper
  myParam2:
     type: MyExtensionCustomValueMapper
  myParam3:
     type: MyExtensionCustomValueMapper

它可能正在工作...... 最好的问候

【讨论】:

以上是关于未执行 TYPO3 v9 上具有 StaticMappableAspectInterface 的自定义路由方面的主要内容,如果未能解决你的问题,请参考以下文章

如何在TYPO3 V9中通过composer安装typo3 / cms-workspaces扩展

如何在 TYPO3 v9 URL 中添加斜杠?

从 TYPO3 v9 升级到 v10 后:显示页面不再工作(无法访问受保护的财产)

使用未引用的命名参数时,TYPO3 抛出异常

TYPO3 升级(7.6 到 10):未找到站点配置

TYPO3 v10 动作控制器和子文件夹内的模板