Leeres DOM im ACP bei Plugin Entwicklung

  • Hallo zusammen,

    ich habe ein absolut merkwürdiges Problem. Ich habe zu meinem Plugin einen weiteren Datentypen hinzugefügt. Insgesamt ist es nun mein 5ter. Bis dahin hat alles wunderbar geklappt aber aus irgendeinem Grund kriege ich, wenn ich im ACP die List Page zum Datentyp aufrufe eine leere Seite.

    Ich konnte runter debuggen, dass das Problem in der getDatabaseTableName Methode von DataBaseObjectList.class.php auftritt. Hier wird:

    return \call_user_func([$this->className, 'getDatabaseTableName']);

    aufgerufen.

    Wenn ich:

    Code
    array(2) {
      [0]=>
      string(22) "wcf\data\review\Review"
      [1]=>
      string(20) "getDatabaseTableName"
    }

    übergebe, kommt zwar kein Fehler, aber es wird keine weitere Zeile PHP mehr prozessiert und im Frontend eine komplett leere Seite übergeben.

    Im Gegensatz funktioniert

    Code
    array(2) {
      [0]=>
      string(20) "wcf\data\genre\Genre"
      [1]=>
      string(20) "getDatabaseTableName"
    }

    als Übergabeparameter ganz wunderbar.

    Ich habe inzwischen alle meine Klassen zu Review mehrfach komplett neu erstellt from Scratch und natürlich auch Line für Line gelesen um zu schauen, ob irgendwo ein Naming Issue vorliegt... Konnte das bis dato allerdings ausschließen. Und überhaupt, wenn ich zum Test einen Fehler eingebaut habe, wurden immer irgendwelche Exceptions geworfen.

    Ich sitze seit über 24 Stunden an diesem Fehler und bin mit dem Latein am Ende. Hat schon mal jemand etwas Ähnliches erlebt?

    LG,

    Marvin

    1. Wie heißt die Tabelle?
    2. Wie sehen die DatabaseObject- und die DatabaseObjectEditor- und DatabaseObjectAction-Klassen aus?
      Eigenen Code kannst du entfernen, ich frage wegen den geerbten Properties und Funktionen - und dem Namespace.

    Werden seitens PHP oder dem WSC Fehler geloggt?

  • Table name: wcf1_review

    Review.class.php

    ReviewAction.class.php

    ReviewList.class.php

  • Ich kann dir nicht ganz folgen. Das sind die Klassen, die ich selbst angelegt habe. Fehlt noch folgende

    acp/form/page/ReviewListPage.class.php

    Beim durch debuggen von der ReviewListPage lande ich über die DataBaseObjectList.class.php (die ist von mir völlig unmodifiziert) und deren Methode getDatabaseTableName eigentlich wiederum in der getDatabaseTableName Methode der DatabaseObject.class.php. Dieser Übergang findet aber nicht statt, statt dessen gibt es diesen White Screen of Death. Logs gibt es wieder in der Applikation noch in den Apache Error Logs.

    Allerdings glaube ich, dass du eigentlich was anderes von mir Wissen möchtest. Kannst du mir einmal auf die Sprünge helfen wo der Unterschied zwischen den Klassen des WCS (die aus meiner Sicht von mir selbst angelegte Klassen sind) und dem was du meinst?

  • Ah sorry, ich war irgendwie wohl geistig abwesend - Reviews gibt es im Shop, aber nicht im WSC. :D

    Du implementierst in der Klasse das Interface IRouteController, Review hat aber keine Funktion getTitle() entsprechend dem Interface. Eventuell löst das das Problem.

  • Ah sorry, ich war irgendwie wohl geistig abwesend - Reviews gibt es im Shop, aber nicht im WSC. :D

    Du implementierst in der Klasse das Interface IRouteController, Review hat aber keine Funktion getTitle() entsprechend dem Interface. Eventuell löst das das Problem.

    BRUTAL!!!! Das war es! Das hat mich locker gerade 5-6 Stunden reine Lebenszeit gekostet.

    Danke dir, hätte ich drauf kommen müssen. Ärgerlich, dass bei sowas kein Fehler geschmissen wird.

    • Official Post

    Hallo,

    die IDE sollte im Ideafall darauf hinweisen. Der Grund für die weiße Seite liegt übrigens hieran:

    WCF/WCF.class.php at fdb8034b6e101b276bdbba2f51de0491fb1ef843 · WoltLab/WCF
    WoltLab Suite Core (previously WoltLab Community Framework) - WCF/WCF.class.php at fdb8034b6e101b276bdbba2f51de0491fb1ef843 · WoltLab/WCF
    github.com

    Der Autoloader unterdrückt Fehler, die beim Laden der Datei auftreten, weil eine separate file_exists-Prüfung insbesondere unter Windows spürbar langsamer wäre, als einfach zu versuchen die Datei zu laden.

    • Official Post

    Hallo,

    Wäre das nicht mal was für einen gesonderten Debug-Modus, um das temporär auszuschalten?

    Schwierig. Der Autoloader sollte nicht von der Existenz der Optionen abhängig sein und allgemein sollte da im „Hot-Path“ so wenig Logik wie möglich sein, da der Autoloader in einem typischen Request potentiell mehrere hundert Male aufgerufen wird.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!