[Frage] AJAX mit eID im Plugin - Zugriff auf TSFE TYPO3-Version: 8.7.1

  • getit getit
    R2-D2
    0 x
    98 Beiträge
    2 Hilfreiche Beiträge
    14. 06. 2017, 19:24

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

    ext_localconf.php

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

    Session.php

    1. <?php
    2. namespace KKSoftware\Kksession\Ajax;
    3.  
    4. use Psr\Http\Message\ResponseInterface;
    5. use Psr\Http\Message\ServerRequestInterface;
    6. use TYPO3\CMS\Extbase\Utility\DebuggerUtility;
    7.  
    8. class Session {
    9. public function storeSession(ServerRequestInterface $request, ResponseInterface $response) {
    10. $response->getBody()->write(json_encode($GLOBALS['TSFE']));
    11. return $response;
    12. }
    13. }

    main.js

    1. $().ready(function() {
    2. $.ajax({
    3. url: 'index.php',
    4. method: 'POST',
    5. data: 'eID=KKSoftwareIndexController::storeSession',
    6. success: function(result) {
    7. console.log(result);
    8. }
    9. });
    10. });

    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.


  • 1
  • getit getit
    R2-D2
    0 x
    98 Beiträge
    2 Hilfreiche Beiträge
    15. 06. 2017, 20:24

    Teilerfolg!!

    Meine Session.php sieht jetzt so aus:

    1. <?php
    2.  
    3. use TYPO3\CMS\Core\Utility\GeneralUtility;
    4.  
    5. $returnData = null;
    6. $TSFE = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('TSFE');
    7. if (!$TSFE) {
    8. /** @var \TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController $TSFE */
    9. $TSFE = GeneralUtility::makeInstance(
    10. 'TYPO3\\CMS\\Frontend\\Controller\\TypoScriptFrontendController',
    11. $TYPO3_CONF_VARS,
    12. 0,
    13. 0
    14. );
    15. $TSFE->initFEuser();
    16. $returnData['TSFE'] = $TSFE;
    17. }
    18.  
    19. $type = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('action');
    20. switch ($type) {
    21. case 'lese':
    22. $returnData['value'] = $TSFE->fe_user->getKey('ses', 'test');
    23. break;
    24. case 'schreibe':
    25. $value = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('input');
    26. $TSFE->fe_user->setKey('ses', 'test', $value);
    27. break;
    28. }
    29. echo json_encode($returnData);

    Und mein JS

    1. var TSFE = null;
    2.  
    3. $().ready(function() {
    4. $('button').on('click', function() {
    5. var type = $(this).attr('id');
    6. var inputData = $('#testinput').val();
    7. $.ajax({
    8. url: 'index.php',
    9. method: 'POST',
    10. data: {
    11. 'eID': 'KKSoftwareIndexController::storeSession',
    12. 'input': inputData,
    13. 'action': type,
    14. 'TSFE': TSFE
    15. },
    16. success: function(result) {
    17. result = jQuery.parseJSON(result);
    18. TSFE = result.TSFE;
    19. if (type == 'lese') {
    20. alert(result.value);
    21. }
    22. }
    23. });
    24. });
    25. });

    Und so sieht mein HTML zum Testen aus:

    1. <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.

  • getit getit
    R2-D2
    0 x
    98 Beiträge
    2 Hilfreiche Beiträge
    18. 06. 2017, 21:42

    Ich habe eine Lösung mit "normalem" Ajax (also mit uri.action und ohne eID) gefunden.
    Guckst du hier: [url]https://www.typo3.net/forum/thematik/zeige/thema/126073/[/url]

  • 1