页面缓存后 TYPO3 搜索框不起作用

TYPO3 search box does not work after page is cached

TYPO3 中的缓存存在问题。 我有一个简单的搜索框,它调用 itemRepository 以根据搜索词获取一些项目。如果没有给出术语,则列出所有项目。

这只适用于第一次。 在我点击搜索按钮后,搜索词被缓存起来,即使我输入一个新的搜索词也会一直被使用。 第一个术语始终显示在搜索框中并用于搜索。我必须清除缓存才能使其再次工作。

即使我将 var_dump($terms); 放在某处,它也会生成一次输出。

我知道我可以禁用 listAction 的缓存,但这会使页面非常慢,因为默认列出了很多项目。 有解决办法吗?使用 TYPO3 8.7.8.

<!-- Searchbox -->
<f:form name="list" action="list" enctype="multipart/form-data">
    <f:form.textfield name="terms" value="{terms}" placeholder="{f:translate(key:'enter_searchterm')}"/>
    <button><f:translate key="search"/></button>
</f:form>

<!-- list with found items -->
<f:for each="{items}" as="item">

    ...
    ...

    <li>{item.title}</li>

    ...
    ...

</f:for>





/**
* @param string $terms
*/
public function listAction($terms = "") {
    $items = $this->itemRepository->findBySearch($terms);

    $this->view->assign('items', $items);
    $this->view->assign('terms', $terms);
}

您需要在 ext_localconf.php 文件的 non-cacheable 列表中添加 list 操作。

// non-cacheable actions
[
    'Controller' => 'list',
]

您确实应该将带有搜索词参数的 list()-action 设置为不可缓存。

要保持​​未过滤列表的性能,您可以添加另一个非缓存操作(不带任何参数)。

这样您就可以将性能保留在未过滤列表中。