在 Extbase 6.2 中,列表页面不再使用 uid

In Extbase 6.2, don't use uid for list page

使用 Extbase 的 "show" 操作时:

<f:link.action action="show" arguments="{event : event}">

我想通过一个特殊的栏目('customID')来查找所说的事件。

实际的 TYPO3-uid 不应出现在 URL 中(有或没有 RealURL)。

原因是数据已经导入,"real"uid为'customId'。

@biesior 总是使用 f:link.page 的方法 – 但我想我会尝试使用官方方法。

(如何)可以在 extbase/fluid 中做到这一点?

为什么不将 realUrl 与 lookUpTable 一起使用?看这里:https://wiki.typo3.org/Realurl/manual#-.3ElookUpTable

这是可能的。假设您的模型事件有一个 属性 customId。所以你像这样生成你的link:

<f:link.action action="show" arguments="{event : event.customId}">

生成的 link 将具有如下查询字符串:

?tx_myext[event]=9999

Extension Builder 生成的showAction 期望传递事件的UID。然后 PropertyMapper 自动获取对象并将其分配给视图:

/**
 * action show
 *
 * @param \Your\Extension\Domain\Model\Event $event
 * @return void
 */
public function showAction(\Your\Extension\Domain\Model\Event $event) {
    $this->view->assign('event', $event);
}

但在您的情况下,您无法通过 UID 获取对象,因为您传递了 customId。所以需要自己去取对象:

/**
 * action show
 *
 * @param integer $event
 * @return void
 */
public function showAction($event) {
    $event = $this->eventRepository->findOneByCustomId($event);
    $this->view->assign('event', $event);
}

注解@param integer $event告诉TYPO3参数是"just"一个整数。然后从您的 eventRepository 调用魔法方法 findOneByCustomIdfindOne 表示您只想返回一个 Event 对象(而不是 QueryResult),而 ByCustomId 查询您的 [=18] 的现有 属性 =] 模型.