typo3 - TYPO3 v9 路由:如何使 routePath 的一部分尊重另一部分的解析值?
问题描述
我有一个 extbase 扩展,其中包含两个具有 1:n 关系的模型,国家和城市。网址应类似于http://www.example.com/countryname/cityname。城市名称在世界上并不是独一无二的,例如在德国和美国都有一个城市叫“莱比锡”。
所以我可以有两个网址
并且将“leipzig”解析为正确的uid必须尊重国家部分。
这可能与当前提供的增强器/方面有关吗?如果没有,您对如何处理这种情况有什么建议吗?
routeEnhancers:
MyWebsitePi1:
type: Extbase
limitToPages: [1]
extension: Website
plugin: Pi1
routes:
- routePath: '/{country_slug}/{city_slug}'
_controller: 'City::show'
_arguments:
country_slug: 'country'
city_slug: 'city'
defaultController: 'City::list'
aspects:
country_slug:
type: PersistedAliasMapper
tableName: 'tx_mywebsite_domain_model_country'
routeFieldName: 'slug'
city_slug:
type: PersistedAliasMapper
tableName: 'tx_mywebsite_domain_model_city'
routeFieldName: 'slug'
解决方案
我认为组合弹头字段将是这里的最佳解决方案。在您的 TCA 代码中,您可以将 slug 配置为从多个 db 字段创建,而不仅仅是一个:
'slug' => [
'exclude' => true,
'label' => 'LLL:EXT:...',
'config' => [
'type' => 'slug',
'fallbackCharacter' => '-',
'size' => 50,
'eval' => 'uniqueInSite',
'generatorOptions' => [
'fields' => ['country', 'city'],
'fieldSeparator' => '-',
'prependSlash' => true,
'prefixParentPageSlug' => true,
'replacements' => [
'/' => '',
],
]
],
],
代替uniqueInSite
你也可以使用uniqueInPid
(见文档)。在路由 yml 配置中,只需读取 slug 字段,然后使用PersistedAliasMapper
就完成了。我尚未测试使用/
as 分隔符字段,但-
工作正常。
推荐阅读
- ios - 使用 WKWebView swift 获取动态加载的 html
- node.js - 阅读 API 文档
- jpa - JPA 一对多与许多孩子
- javascript - 使用 onFocus 和 onBlur 有条件地渲染 currency-input-field 包的 currencyInput 组件的后缀,但它仅在第一次工作
- mongodb - MongoDB添加数据文件和恢复数据库
- groovy - 如何在邮件部分添加生成的 URL?在詹金斯管道中
- reactjs - 在反应测试库中导入静态资产不起作用
- kubernetes - 在同一个 AKS 群集中部署两个具有 nginx 入口和 tls 终止的隔离应用程序实例
- scala - 如何使用 Scala 2.12 Zeppelin Notebook
- flutter - 轮播滑块项中的颤振动态列表