Zum Inhalt springen

AJAX mit eID im Plugin - Zugriff auf TSFE

Erstellt am 14. Juni 2017 · 2 Antworten · letzte Antwort am 18. Juni 2017

Tags: Extbase, JavaScript & AJAX, TYPO3 8, Frage

getit ·

Auf Stefans TYPO3 Seite https://www.typo3lexikon.de/typo3-tutorials/ajax/eid-beispiele.html wird beschrieben wie man mit einer eID AJAX in einem Plugin zu realisieren.

ext_localconf.php

$GLOBALS['TYPO3_CONF_VARS']['FE']['eID_include'] = ['KKSoftwareIndexController::storeSession' => \KKSoftware\Kksession\Ajax\Session::class . '::storeSession'];

Session.php

<?php
namespace KKSoftware\Kksession\Ajax;

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use TYPO3\CMS\Extbase\Utility\DebuggerUtility;

class Session {
  public function storeSession(ServerRequestInterface $request, ResponseInterface $response) {
    $response->getBody()->write(json_encode($GLOBALS['TSFE']));
    return $response;
  }
}

main.js

$().ready(function() {
  $.ajax({
    url: 'index.php',
    method: 'POST',
    data: 'eID=KKSoftwareIndexController::storeSession',
    success: function(result) {
      console.log(result);
    }
  });
});

Die Konsolenausgabe ist ein leeres Array.
Warum kann ich hier nicht auf das TSFE-Array zugreifen?

Hintergrund:
Ich möchte gerne per $GLOBALS['TSFE']->fe_user auf die Session lesend und schreibend zugreifen.

getit ·

Teilerfolg!!

Meine Session.php sieht jetzt so aus:

<?php

use TYPO3\CMS\Core\Utility\GeneralUtility;

$returnData = null;
$TSFE = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('TSFE');
if (!$TSFE) {
  /** @var \TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController $TSFE */
  $TSFE = GeneralUtility::makeInstance(
    'TYPO3\\CMS\\Frontend\\Controller\\TypoScriptFrontendController',
    $TYPO3_CONF_VARS,
    0,
    0
  );
  $TSFE->initFEuser();
  $returnData['TSFE'] = $TSFE;
}

$type = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('action');
switch ($type) {
  case 'lese':
    $returnData['value'] = $TSFE->fe_user->getKey('ses', 'test');
    break;
  case 'schreibe':
    $value = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('input');
    $TSFE->fe_user->setKey('ses', 'test', $value);
    break;
}
echo json_encode($returnData);

Und mein JS

var TSFE = null;

$().ready(function() {
  $('button').on('click', function() {
    var type = $(this).attr('id');
    var inputData = $('#testinput').val();
    $.ajax({
      url: 'index.php',
      method: 'POST',
      data: {
	'eID': 'KKSoftwareIndexController::storeSession',
	'input': inputData,
	'action': type,
	'TSFE': TSFE
      },
      success: function(result) {
        result = jQuery.parseJSON(result);
	TSFE = result.TSFE;
	if (type == 'lese') {
	  alert(result.value);
	}
      }
    });
  });
});

Und so sieht mein HTML zum Testen aus:

<input type="text" id="testinput"></input><button type="button" id="schreibe">Schreibe</button><br/><button type="button" id="lese">Lese</button>

Das Problem dabei:
Beim 1. Ajax-Call ist TSFE leer - ok
Beim 2. Ajax-Call ist TSFE gefüllt - ok
In StoreSession.php kommt aber ein Array an - also vom Typ her (entspricht zwar dem TFSE das von initFEuser() erzeugt wird, ist aber nur ein Array und nicht ein Objekt vom Typ TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController).

Also mein bisheriges Problem scheint nur noch zu sein aus dem Array ein Objekt zu machen.