Fehlerhafte Überprüfung der DatabaseObjectDecorator baseClass.

  • Affected Version
    WoltLab Suite 5.5
    Affected App
    WoltLab Suite Core

    ich hatte gerade den Fall, dass ich die Klasse einer DatabaseObjectList angepasst habe und bekam dann den Fehler:

    Quote

    'wcf\data\conversation\ViewableConversation' can't decorate objects of class 'test\data\conversation\Conversation'

    Dabei leitet test\data\conversation\Conversation von wcf\data\conversation\Conversation ab. Die Parameterreihenfolge hier scheint falsch:

    Code: wcf\data\DatabaseObjectList.class.php
    if ($objectClassName != $baseClassName && !\is_subclass_of($baseClassName, $objectClassName)) {
        throw new SystemException("'" . $this->decoratorClassName . "' can't decorate objects of class '" . $objectClassName . "'");
    }

    In is_subclass_of kommt zuerst das object, das überprüft werden soll und als zweites die klasse von der das objekt eine Unterklasse sein muss. So wie es es jetzt ist, kann ich als Klasse nur wcf\data\DatabaseObject angeben und das kracht dann im weiteren Ablauf.

    • Official Post

    Hallo,


    die Prüfung ist zwar mit 5.5.8 korrigiert, ich würde dir aber empfehlen, von einer Vererbung der DBOs abzusehen. Die DBO-Klassen sind nicht wirklich auf Vererbung durch Fremdklassen ausgelegt.

  • Super Danke!

    Ja, die Risiken sind mir bekannt... Was wäre aus eurer Sicht eine best practice, wenn man eigene Logik für DBOs brauch? Ich habe es an anderen Stellen mit Helper Klassen per Core Object gemacht. Fühlt sich aber ähnlich schlecht an.

    • Official Post

    Hallo,

    Vielleicht hilft dir das Thema: RE: Neue Funktion für Klasse per Event-Listener? etwas?

    Da das Thema sich um DBOAction dreht, zur Sicherheit auch noch einmal die Neuerungen mit WoltLab Suite 6.0:


Participate now!

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