【问题标题】:TYPO3 9.5 - Problems with new Routing EnhancersTYPO3 9.5 - 新路由增强器的问题
【发布时间】:2018-10-21 15:08:34
【问题描述】:

我正在尝试为 extbase 扩展设置新的语音 URL 路由。但是前端的详细信息链接绝对没有任何反应。

这是我的 yaml 站点配置代码(NewsPlugin 配置工作,但 CardealerPlugin 不工作):

routeEnhancers:
  NewsPlugin:
    type: Extbase
    limitToPages: [92,93]
    extension: News
    plugin: Pi1
    routes:
      - { routePath: '/{news_title}', _controller: 'News::detail', _arguments: {'news_title': 'news'} }
    defaultController: 'News::detail'
    aspects:
      news_title:
        type: PersistedAliasMapper
        tableName: 'tx_news_domain_model_news'
        routeFieldName: 'title'
        routeValuePrefix: '/'
  CardealerPlugin:
    type: Extbase
    limitToPages: [84,90]
    extension: Cardealer
    plugin: Pi1
    routes:
      - { routePath: '/{model_description}', _controller: 'Cardealer::show', _arguments: {'model_description': ' car'} }
    defaultController: 'Cardealer::show'
    aspects:
      model_description:
        type: PersistedAliasMapper
        tableName: 'tx_cardealer_domain_model_car'
        routeFieldName: 'model_description'
        routeValuePrefix: '/'

extTables.php

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
    'Cardealer',
    'Pi1',
    'Cardealer'
);

有人可以帮忙吗?

【问题讨论】:

  • EXT:cardealer 未知,可能是自己的 TYPO3 扩展。您是否确保配置的值与扩展名匹配? Fx:插件名称“Pi1”和控制器名称“Cardealer”?
  • 我认为这些值是正确的。我从 extTables.php 中添加了代码
  • 我不知道是不是这个原因,但可能是这部分的多余空间:{'model_description': 'car'}
  • 另一个原因可能是您注册插件的地方。我在我的扩展中的 Configuration/TCA/Override/tt_content.php 和 extTables.php 中的 not 中执行此操作。另外,我在扩展名前面添加了供应商,如下所示: \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin( 'VENDOR.extensionkey', 'Pi1', 'my plugin' );
  • @AlexanderGrein:感谢您的回答。我已经创建了 Overides 文件并在 registerPlugin() 中设置了命名空间。但它没有效果:-(你是如何建立到细节视图的链接的?这似乎是不可能的 。我怀疑这一点,因为如果我在新闻列表模板中使用 ,链接也不会解析为口语 URL。

标签: routing typo3 extbase typo3-9.x


【解决方案1】:

如果在 TypoScript 设置中为您的插件启用了“skipDefaultArguments”功能,当前有一个错误 https://forge.typo3.org/issues/87542 会中断非默认插件控制器的路由。

所以目前,请确保 skipDefaultArguments 在您的扩展 TypoScript 配置中未激活

plugin.tx_myextension {
    features {
        skipDefaultArguments = 0
    }
}

另外,检查扩展的默认 TypoScript 设置是否包含在您的 TypoScript 模板中。

【讨论】:

  • 这不是原因。我的问题解决了。看第一个答案
  • 当然,但是人们会遇到同样的问题并通过谷歌找到这个,这个答案可能会解决他们的问题,就像对我一样。
【解决方案2】:

差不多一周后我找到了解决办法!

a) 我的扩展记录现在有新的 slug TCA 字段,它会生成唯一的 URL 段。

'slug' => [
    'exclude' => true,
    'label' => 'URL Segment',
    'config' => [
        'type' => 'slug',
        'prependSlash' => true,
        'generatorOptions' => [
            'fields' => ['title'],
            'prefixParentPageSlug' => true,
        ],
        'fallbackCharacter' => '-',
        'eval' => 'uniqueInSite',
    ],
],

b) 我的 YAML 配置:

routeEnhancers:
  CardealerPlugin:
    type: Extbase
    limitToPages: [86]
    extension: Cardealer
    plugin: Pi1
    routes:
      -
        routePath: '/{uid_var}'
        _controller: 'Standard::show'
        _arguments:
          uid_var: car
    defaultController: 'Standard::list'
    aspects:
      uid_var:
        type: PersistedAliasMapper
        tableName: 'tx_cardealer_domain_model_car'
        routeFieldName: 'slug'

c) 流体链接

<f:link.action action="show" controller="Standard" pageUid="{settings.pid.details}" arguments="{car: '{car.uid}'}">

【讨论】:

  • 很好的答案。作为对此的补充。如果您只使用简单的内容元素扩展,则 yaml 属性插件必须是 plugin: '' 并且流体链接必须具有 extensionName="MyExtension"。如果 TCA prependSlash + prefixParentPageSlug 为真,我也会遇到 FE 错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多