给定 TCA slug 配置:
'slug' => [
'label' => 'LLL:EXT:lns_games/Resources/Private/Language/locallang_db.xlf:lns_games.slug',
'config' => [
'type' => 'slug',
'size' => 50,
'generatorOptions' => [
'fields' => ['platform.slug', 'title'],
'fieldSeparator' => '/',
'prefixParentPageSlug' => false,
'postModifiers' => [
\Lns\LnsGames\UserFunctions\FormEngine\Slug::class . '->modifySlug'
]
],
'fallbackCharacter' => '-',
'eval' => 'uniqueInPid',
'default' => '',
'behaviour' => [
'allowLanguageSynchronization' => 1
],
]
],
结果是像“pc/标准版”这样的蛞蝓。此 Slug 在页面基础上是独一无二的。路由增强器配置如下:
routeEnhancers:
GamePlugin:
type: Extbase
extension: LnsGames
plugin: GamesPlugin
routes:
- routePath: '{game_title}'
_controller: 'Game::show'
_arguments:
game_title: game
defaultController: 'Game::show'
requirements:
game_title: '^[a-zA-Z0-9\-\/]+$'
aspects:
game_title:
type: PersistedAliasMapper
tableName: tx_lnsgames_domain_model_game
routeFieldName: slug
使用 f:link.action ViewHelper 构建的链接会生成指向该唯一 url 的正确链接:
<f:link.action pageUid="{game.gameObject.pid}" controller="Game" action="show" arguments="{game: game.gameObject}">
{game.gameObject.uid}
包含正确的对象。
这导致此链接: https ://test.ddev.site/games/farming-simulator/pc/standard-edition
在其他页面上存在具有相同 slug 的其他链接,例如: https ://test.ddev.site/games/wolfenstein/pc/standard-edition 注意“pc/standard-edition”。
现在跟随该链接会显示一个随机对象,而不是作为参数提供的对象。
这是因为 PersistedAliasMapper 找到所有带有该 slug 的对象并提供一个随机的对象。它忽略了pid。
我希望显示该特殊页面的对象。我怎样才能做到这一点?