Geschützte Downloads in Joomla - Zugriff auf Modul Helper-Klasse

  • Hallo David,


    für eine Webseite nutze ich ja das von Dir zur Verfügung gestellt Script.


    Ich habe es für meine Bedürfnisse weiter angepasst und mache zusätzliche Prüfungen, bevor die Datei ausgeliefert wird. Es arbeitet mit einem von mir entwickelten Modul zusammen und nun wollte ich gerne auf eine Funktion der Helper-Klasse zugreifen.


    Zum testen mache ich es erst einmal ganz einfach:

    Das Test-Modul hat eine Helper-Klasse, die zum testen einfach nur den übergebenen String zurückgibt.


    Innerhalb der readmedia.php habe ich dazu den Verweis auf den Helper-Namespace hinzugefügt:

    use ITCS\Module\ItcsTest\Site\ItcsTestHelper;


    Ab der Zeile 43 (nach "\Joomla\CMS\Factory::$application = $app;") wollte ich den Aufruf der Funktion hinzufügen und zum Testen lasse ich mir das Ergebnis in einer Meldung ausgeben:

    PHP
    $str = 'Test-Ausgabe - readmedia.php';
    $test  = ItcsTestHelper::mytest('Test-Ausgabe - readmedia.php');
    Factory::getApplication()->enqueueMessage(Text::_('TEST-Modul: <br>') . $test, 'info');
    Factory::getApplication()->redirect(JRoute::_(URI::root()));


    Allerdings führt das nicht zum Erfolg, da die Klasse nicht gefunden / geladen werden kann. Es kommt die nachfolgende Fehlermeldung:


    Von einem anderen Modul aus, kann ich damit auf die Klasse zugreifen.

    Kannst Du mir sagen, was hier noch fehlt, um auf die Klasse zugreifen zu können?

    Wenn man die Lösung hat, dann muss man nur noch das passende Problem finden.

  • Ich habe es glaube ich gefunden. Ich muss den namespace zuvor explizit registrieren, damit ich darauf zugreifen kann. Also einfach die nachfolgende Zeile für das "Test-Modul" vorab ergänzen.

    PHP
    JLoader::registerNamespace('ITCS\\Module\\ItcsTest\\Site', dirname(__FILE__) . '/modules/mod_itcs_test');

    SniperSister => Oder hättest Du da Bedenken oder gibt es eine bessere Lösung?

    Wenn man die Lösung hat, dann muss man nur noch das passende Problem finden.

  • Hast du den namespace des Moduls in der XML Datei registriert?

    ja - das habe ich gemacht. In der autoload_psr4.php ist auch alles vorhanden. Mir war nur noch ein Fehler im Namespace aufgefallen, den ich nachträglich korrigiert hatte. Von einem anderen Modul aus kann ich auch so auf die Class zugreifen, wenn ich es mit use lade.

    Wenn man die Lösung hat, dann muss man nur noch das passende Problem finden.