2

给定 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。

我希望显示该特殊页面的对象。我怎样才能做到这一点?

4

0 回答 0