我有一个自定义的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
。所以,我想我错过了什么。
有人可以帮忙吗?
答案 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.skipDefaultArguments
或plugin.tx_ext.features.skipDefaultArguments
,如果它们等于默认的控制器/动作,它将删除控制器和/或动作参数。目标插件。如果启用,出于相同的原因,它也会破坏路由增强器。不幸的是,我从一开始就启用了此功能,以使URL简短。
还有另一种设置config.tx_extbase.mvc.callDefaultActionIfActionCantBeResolved
,您可能需要注意,这可能会导致相同的问题。
无论如何,新的路由功能非常棒。