Ergebnis 1 bis 9 von 9

Thema: Einfache Klasse ohne Namespace als Cron nutzen / Klasse wird nicht geladen

  1. #1
    Contao-Nutzer
    Registriert seit
    17.09.2010.
    Beiträge
    161

    Standard Einfache Klasse ohne Namespace als Cron nutzen / Klasse wird nicht geladen

    Hallo,
    ich möchte gerne eine einfache Klasse (SEHR simpel...) als Cron nutzen und habe eingetragen:
    In der config.php
    PHP-Code:
    $GLOBALS['TL_CRON']['minutely'][] = array('CronWorker','cron'); 
    und in der autoload.php in ClassLoader::addClasses
    PHP-Code:
    'CronWorker' => 'system/modules/cron/classes/CronWorker.php'
    Allerdings scheitert Contao bei dem Versuch, die Klasse zu erzeugen, bzw. das autoload klappt nicht. Was mache ich falsch?
    P.S.: Interner Cache ist ausgeschaltet.
    Danke!

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.126
    Partner-ID
    10107

    Standard

    Welche Fehlermeldung genau? Wie sieht deine CronWorker Klasse aus?

  3. #3
    Contao-Nutzer
    Registriert seit
    17.09.2010.
    Beiträge
    161

    Standard

    Wie die Klasse aussieht ist eigentlich unerheblich, weil sie gar nicht erst geladen wird. Die Ursache sitzt -etwas tiefer geschaut- im ClassLoader vom composer, der das Verzeichnis nicht bilden kann. Vielleicht auch nicht verwunderlich, weil beim Composer ja ein Namespace gängig ist und (immer?) Teil des Include-Pfades ist. Allerdings frage ich mich, warum es überhaupt noch eine autoload.php gibt, wenn der Composer das Autoloading nach PSR-4 übernimmt. Und ich frage mich, ob man überhaupt noch eine Klasse ohne Namespace als Cron eintragen kann...

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.126
    Partner-ID
    10107

    Standard

    Wenn du die Klasse per Composer Autoloader laden lässt, musst du sie nicht mit der autoload.php der Contao Extension laden lassen. Namespaces spielen dabei keine Rolle (von Konflikten abgesehen). Um dir helfen zu können musst du genauer beschreiben, was du nun machst und was nun genau der Fehler ist.

  5. #5
    Contao-Nutzer
    Registriert seit
    17.09.2010.
    Beiträge
    161

    Standard

    Naja... eigentlich umgekehrt. Ich will die Klasse über die autoload.php Contao zugänglich machen, denn der Autoloader von Composer nutzt wie gesagt den Namespace.

    Der Fehler ganz genau: Die Funktion "findFileWithExtension" des Composer Classloaders liefert null zurück und also kann die Klassendatei nicht included werden. Eigentlich dürfte der Composer Autoloader gar nicht erst "loslaufen" aber da der Composer ein PHP-autoload setzt und die Methode "import" von Contao\System nun mal new() nutzt weiß auch nicht, ob das überhaupt verhindert werden kann.

    Was ich will: Wie beschrieben eine Miniklasse mit einer Minifunktion (im Moment sogar noch leer) als Cronjob einsetzen. Und den Überbau mit einem Namespace nach Möglichkeit verhindern um die Sache so einfach wie möglich zu halten.

    Aber vielleicht geht es ja anders viel besser? Ich bin lernfähig und -willig...

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.126
    Partner-ID
    10107

    Standard

    Ich verstehe dein Setup immer noch nicht. Beschreibe genauer was du gemacht hast. zB den Inhalt der composer.json deiner Extension und den Inhalt deiner CronWorker.php

  7. #7
    Contao-Nutzer
    Registriert seit
    17.09.2010.
    Beiträge
    161

    Standard

    Eine composer.json gibt es (noch?) nicht. Und die Test-Klasse ist einfach:
    PHP-Code:
    <?php
    class CronWorker
    {
       public function 
    cron()
       {
          
    System\log('Test...'__METHOD__TL_GENERAL);
       }
    }
    ?>
    Und CronWorker.cron() soll halt der Cronjob werden. Das ist alles...

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.126
    Partner-ID
    10107

    Standard

    Und was genau funktioniert nun nicht? Gibt es eine Fehlermeldung im error.log bspw.?

  9. #9
    Contao-Nutzer
    Registriert seit
    17.09.2010.
    Beiträge
    161

    Standard

    Letztlich führt(e) das zu

    PHP Fatal error: Class 'CronWorker' not found in D:\wwwroot\swnh\system\modules\core\library\Contao \System.php on line 140

    Allerdings -und jetzt wird es merkwürdig- läuft der Cronjob jetzt anscheinend auf einmal???? Warum? - Keine Ahnung. An den entscheidenden Stellen habe ich nichts geändert (eigentlich an gar keinen Stellen denn ich habe zwischenzeitlich an was anderem gearbeitet...)
    Also erstmal ad acta - und VIELEN DANK für Deine Bemühungen...

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •