Получить данные от пользователя FE в собственный EXT в TYPO3 8.7.x

#typo3 #typo3-8.x #typo3-extensions

#typo3 #typo3-8.x #typo3-расширения

Вопрос:

Привет, я пытаюсь получить данные (т. Е. uid) от текущего зарегистрированного пользователя, который использует сайт.

В TYPO3 7.6.X это было очень просто. Вам просто нужно было использовать $GLOBALS['TSFE']->fe_user->user для получения данных. В TYPO3 8.7.x это немного сложнее. Он должен работать с. $frontendUserAspect = GeneralUtility::makeInstance(Context::class)->getAspect('frontend.user');
$frontendUserAspect->get('id')
Но в моем случае это не так.

Мой код выглядит так:

 <?php

namespace ReevoReevoElearningOutput;

use TYPO3CMSCoreDatabaseConnectionPool;
use TYPO3CMSCoreDatabaseQueryQueryBuilder;
use TYPO3CMSCoreUtilityGeneralUtility;
use TYPO3CMSExtbasePersistenceGenericMapperDataMapper;
use TYPO3CMSFrontendContentObjectContentObjectRenderer;
use TYPO3CMSExtbaseObjectObjectManager;
use TYPO3CMSFrontendControllerTypoScriptFrontendController;
use TYPO3CMSCoreContextContext;
use TYPO3CMSCoreContextUserAspect;

class FlexformValue {
    function field($content, $conf) {
// TSFE USER ID
$frontendUserAspect = GeneralUtility::makeInstance(Context::class)->getAspect('frontend.user');
$frontendUserAspect->get('id'); 
$test = $frontendUserAspect;
echo $test;
return "$test";
    }
} 
  

Я получаю следующую ошибку: ‘TYPO3 CMS Core Context Context’ не найден или что-то в этом роде.
Но если я удаляю эту строку use TYPO3CMSCoreContextContext; , она ищет тот же файл в моей папке пространства имен. Кто-нибудь знает, как заставить это работать?

Ответ №1:

$GLOBALS['TSFE']->fe_user->user по-прежнему доступен в TYPO3 8.7. Я думаю, что он устарел в 9, но не будет удален до 10. Я думаю, что аспект интерфейса пользователя был введен в 9.4 и, вероятно TYPO3CMSCoreContextContext , был таким же, поэтому ошибка верна. Вы все равно должны использовать $GLOBALS['TSFE']->fe_user->user в TYPO3 8.7.

Официальная документация:

Что касается TYPO3 v9, старые свойства можно использовать так же, как и раньше, но вызовет ошибку PHP E_USER_DEPRECATED.

Ответ №2:

Контекстный API был введен в TYPO3 9. Если documentatin верен, контекстный API не был частью TYPO3 8.7.

 // will work in TYPO3 9.5
$frontendUserAspect = GeneralUtility::makeInstance(Context::class)->getAspect('frontend.user');
$frontendUserAspect->get('id')