Hallo zusammen,
ich schlage mich gerade etwas mit Routing in Verbindung mit einem eingeloggten Frontend-User herum.
Es geht um eine Seite, über die eine Onlineschulung für eingeloggte Mitglieder stattfinden soll. Damit am Ende ein Zertifikat ausgestellt werden kann, soll das System in der Lage sein zu erkennen, wie lange ein User die Onlineschulung angesehen hat.
Meine Idee war, dafür ein Routing auf eine URL einzurichten, die per JavaScript ein Mal pro Minute aufgerufen wird. Für den jeweils eingeloggten User sollen dann Daten in die Datenbank geschrieben werden.
Ich habe es inzwischen hinbekommen ein Routing über eine eigene Erweiterung einzurichten.
Der Controller wurde in der services.yml registriert.PHP-Code:<?php
// src/Controller/UpdateMemberStatsController.php
namespace BohnMedia\MemberStatsBundle\Controller;
use Contao\CoreBundle\Framework\ContaoFramework;
use Contao\FrontendUser;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\Session;
class UpdateMemberStatsController extends AbstractController
{
protected $rootDir;
protected $session;
protected $framework;
public function __construct(string $rootDir, Session $session, ContaoFramework $framework)
{
$this->rootDir = $rootDir;
$this->session = $session;
$this->framework = $framework;
}
public function loadAction(): Response
{
// $objUser = FrontendUser::getInstance();
return $this->json(['path' => 'it works']);
}
}
Die Route wurde wie folgt eingerichtet.Code:services: BohnMedia\MemberStatsBundle\Controller\UpdateMemberStatsController: arguments: - '%kernel.project_dir%' - "@session" - "@contao.framework" tags: ['controller.service_arguments'] calls: - [setContainer, ['@service_container']]
Zurzeit versuche ich, an die ID des im Frontend eingeloggten Nutzers zu kommen, was per "FrontendUser::getInstance()" in der Funktion "loadAction" auch bereits funktioniert, wenn man eingeloggt ist.Code:update_member_stats: path: /update_member_stats defaults: _controller: BohnMedia\MemberStatsBundle\Controller\UpdateMemberStatsController:loadAction _scope: frontend _token_check: true
Bin ich jedoch nicht eingeloggt, erhalte ich folgende Fehlermeldung.PHP-Code:$objUser = FrontendUser::getInstance();
$userId = $objUser->id;
Ausgelöst wird der Fehler in der FrontendUser.php in Zeile 89.Code:Call to a member function get() on null
Nun bin ich mir nicht ganz sicher, ob FrontendUser hier überhaupt die richtige Herangehensweise ist.PHP-Code:$objToken = System::getContainer()->get('security.token_storage')->getToken();
Ist der Weg hier korrekt oder gibt es einen eleganteren und vor allem auch sicheren Weg, hier zweifelsfrei an die ID des eingeloggten Nutzers innerhalb einer eigenen Route zu kommen?
Danke und VG
Dennis

Zitieren
