如何使用路由器增强器翻译URL

时间:2019-08-16 10:45:15

标签: typo3 router extbase

我有一个自定义的extbase扩展,它根据参数显示了不同的内容。

class SiteController extends ActionController {
   /**
    * @param int $year
    */
    protected function newsAction(int $year) {
        ......
    }
}

这是config.yaml中的routeEnhancers。

routeEnhancers:
  News:
    type: Extbase  
    limitToPages: [6]
    extension: Site  
    plugin: Pi1  
    routes:
      - routePath: '/{year}',
        _controller: 'Site:news'

但是,它不会将URL http://landing.io/news?tx_site_pi1[year]=2018&cHash=f1a79b262f6567570dd78b6148b17554转换为http://landing.io/news/2018,但是我可以访问http://landing.io/news/2018?cHash=f1a79b262f6567570dd78b6148b17554。所以,我想我错过了什么。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

首先,在config.yaml中修复一个错字,它应该是Site::news而不是Site:news

经过调试,我终于解决了这个问题。

根据Routing Enhancers and Aspects的说法

  

创建extbase插件时,具有多个控制器/操作组合是很常见的。因此,Extbase插件增强器是常规插件增强器的扩展,提供了生成多种变体的功能,通常基于控制器/操作对的数量来构建。

在“ Extbase插件增强器”部分。

但是,如果您想让extbase路由增强器正常工作,则您的URL中必须&tx_ext_pi1[controller]=CONTROLLER&tx_ext_pi1[action]=ACTION,这是该部分中所有URL的工作,但我没有实现。否则,您将在FALSE中得到\TYPO3\CMS\Extbase\Routing\ExtbasePluginEnhancer::verifyRequiredParameters(),并且永远不会翻译您的URL。因此,我认为这一点应该包含在文档中,或者至少突出显示从“通常”开始的最后一句话。

同时,EXT:extbase中还有一个TypoScript设置,称为config.tx_extbase.features.skipDefaultArgumentsplugin.tx_ext.features.skipDefaultArguments,如果它们等于默认的控制器/动作,它将删除控制器和/或动作参数。目标插件。如果启用,出于相同的原因,它也会破坏路由增强器。不幸的是,我从一开始就启用了此功能,以使URL简短。

还有另一种设置config.tx_extbase.mvc.callDefaultActionIfActionCantBeResolved,您可能需要注意,这可能会导致相同的问题。

无论如何,新的路由功能非常棒。