0

我正在尝试在我的插件中使用缓存。在 ext_localconf.php

if (!is_array($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['myextension'])) {
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['myextension'] = [];}

if (!isset($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['myextension']['frontend'])) {
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['myextension']['frontend'] = 'TYPO3\\CMS\\Core\\Cache\\Frontend\\StringFrontend';}

if (!isset($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['myextension']['options'])) {
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['myextension']['options'] = ['defaultLifetime' => 0];}

if (!isset($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['myextension']['groups'])) {
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['myextension']['groups'] = ['pages'];}

在我的控制器动作中:

$cacheIdentifier = 'topic' . $topic->getUid();
$cache = GeneralUtility::makeInstance(CacheManager::class)->getCache('myextension');

$result = unserialize($cache->get($cacheIdentifier));

if ($result !== false ) {
    DebuggerUtility::var_dump($result);
} else {
    $result = $this->postRepository->findByTopic($topic->getUid(), $page, $itemsPerPage);
    $cache->set($cacheIdentifier, serialize($result), ['tag1', 'tag2']);
    DebuggerUtility::var_dump($result);
}

第一次加载该操作的页面时一切正常,并且已在数据库中创建条目(cf_myextension 和 cf_myextension_tags}。

但是第二次缓存被加载,我得到一个错误。甚至DebuggerUtility::var_dump($result);不起作用:

Call to a member function map() on null    
in ../typo3/sysext/extbase/Classes/Persistence/Generic/QueryResult.php line 96

*/
protected function initialize()
{
    if (!is_array($this->queryResult)) {
        $this->queryResult = $this->dataMapper->map($this->query->getType(), $this->persistenceManager->getObjectDataByQuery($this->query));
    }
}

/**

正常的 var_dump 工作并吐出缓存条目。问题是什么?我忘记了什么吗?不能将 QueryResult 与其他一些变量一起作为数组存储在缓存中吗?我还尝试了 VariableFrontend 缓存,它产生了同样的错误。

4

1 回答 1

0

E-tools GUI 应用程序缩进和格式化 HTML、JavaScript、JSON 和 SQL。要在所有当前支持的 Ubuntu 版本中安装 e-tools snap 包,请打开终端并键入:

sudo snap install e-tools
于 2019-06-06T12:42:28.493 回答