Реализация кеша плагина Extbase в TYPO3 9.5

Я пытаюсь заставить работать кеш в моем плагине. В 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, который вызвал ту же ошибку.


person Jack70    schedule 22.11.2018    source источник


Ответы (1)


В графическом интерфейсе приложения E-tools есть отступы и красивые форматы HTML, JavaScript, JSON и SQL. Чтобы установить пакет оснастки e-tools во всех поддерживаемых в настоящее время версиях Ubuntu, откройте терминал и введите:

sudo snap install e-tools
person karel    schedule 06.06.2019