[Aktualisiert im April 2020] In einem aktuellen Projekt müssen in einem Backend-Modul Daten in die Session gespeichert und wieder ausgelesen werden. Dazu kann man sich einen einfachen Wrapper für getSessionData und setAndSaveSessionData in $GLOBALS[‚BE_USER‘] machen, beispielsweise als SessionService:
<?php namespace Vendor\Package\Service; use TYPO3\CMS\Core\Authentication\BackendUserAuthentication; class SessionService { /** * @var string */ protected $storageKey = 'tx_package'; /** * @var BackendUserAuthentication */ protected $backendUser = null; /** * SessionService constructor. */ public function __construct() { $this->backendUser = $this->getBackendUserObject(); } /** * @param string $key * @param mixed $value */ public function set($key, $value): void { $data = $this->backendUser->getSessionData($this->storageKey); if(is_array($data)) { $data[$key] = $value; } else { $data = [$key => $value]; } $this->backendUser->setAndSaveSessionData($this->storageKey, $data); } /** * @param string $key * @return mixed */ public function get(string $key) { $data = $this->backendUser->getSessionData($this->storageKey); return $data[$key] ?? null; } /** * @param string $key */ public function delete(string $key): void { $data = $this->backendUser->getSessionData($this->storageKey); unset($data[$key]); $this->backendUser->setAndSaveSessionData($this->storageKey, $data); } /** * @param string $storageKey */ public function setStorageKey(string $storageKey) { $this->storageKey = $storageKey; } /** * @return BackendUserAuthentication */ protected function getBackendUserObject(): BackendUserAuthentication { return $GLOBALS['BE_USER']; } } |
Verwendung im Controller:
<?php namespace Vendor\Package\Controller; use Vendor\Package\Service\SessionService; /** * @package Vendor\Package\Controller */ class FooController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController { /** * @var SessionService */ protected $session; /** * @param SessionService $sessionService */ public function injectSessionService(SessionService $sessionService) { $this->session = $sessionService; } /** * @return void */ public function indexAction(): void { $this->session->set('foo', 'bar'); // ... $foo = $this->session->get('foo'); } } |