TYPO3使用routeEnhancers配置插件路由时无参数及分页路由失效问题
TYPO3 插件路由规则故障修复方案
故障根因
- 原有配置中
letter参数的正则要求为必须匹配1位英文字母,但同时设置了默认值为空字符串,当selectedLetter参数为空时,会触发带{letter}占位符的路由规则,空值不符合正则要求导致报错。 - 未配置无任何参数的根路由,无法匹配
example.com/page/的场景。 - 路由优先级逻辑缺失,空
selectedLetter的分页请求会和带字母筛选的分页请求混淆。
修改后的配置
routeEnhancers: MyPluginList: type: Extbase extension: MyExtension plugin: list routes: # 根路由:对应无筛选无分页的列表首页 - routePath: '/' _controller: 'MyController::list' # 带字母筛选的列表页 - routePath: '/a-z/{letter}' _controller: 'MyController::list' _arguments: letter: 'selectedLetter' # 带字母筛选的分页页 - routePath: '/a-z/{letter}/more/{page}' _controller: 'MyController::list' _arguments: letter: 'selectedLetter' page: 'currentPage' # 无字母筛选的全局分页页 - routePath: '/page-{page}' _controller: 'MyController::list' _arguments: page: 'currentPage' defaultController: 'MyController::list' requirements: letter: '^[a-zA-Z]{1}$' page: '\d+' defaults: page: '0' aspects: page: type: StaticRangeMapper start: '1' end: '100' letter: type: StaticValueMapper map: a: A b: B c: C d: D e: E f: F g: G h: H i: I j: J k: K l: L m: M n: N o: O p: P q: Q r: R s: S t: T u: U v: V w: W x: X y: Y z: Z
额外注意事项
- 移除了
defaults配置项下的letter: ''默认值,确保没有selectedLetter参数的请求不会匹配带{letter}占位符的路由。 - 路由顺序按照从具体到宽泛的规则排列,避免出现高优先级路由覆盖低优先级路由的问题。
- 生成分页链接时需要做逻辑判断:如果当前存在选中的筛选字母,分页链接必须携带
selectedLetter参数,会自动匹配带/a-z/前缀的分页路由;如果没有筛选字母,分页链接不要携带selectedLetter参数(包括空值也不要传递),会自动匹配全局/page-{page}路由。
内容的提问来源于stack exchange,提问作者chris
相关产品推荐
相关产品推荐

