Ich verstehe den Wunsch, die Leute zur Verwendung des Arguments include_condition in einer Standardverwendung der Methode add_to_serializer zu bewegen, d. h. um eigene Methoden zu Serializern hinzuzufügen.
Es gibt jedoch einige Fälle, in denen ein Plugin eine include_-Methode zu einem Serializer hinzufügen möchte, die nicht diesem Fall entspricht, d. h. wenn Sie nicht bestimmen, ob Ihr eigenes benutzerdefiniertes Attribut enthalten ist, sondern eine include_-Methode in einem Core-Serialisierer überschreiben, z. B.
Ich schätze, dass dieser spezielle Anwendungsfall überdacht werden könnte, um keine Überschreibung der Site-Serialisierermethode zu erfordern, oder dass die Überschreibung auf andere Weise erreicht werden könnte, aber ich frage mich, ob es einen inhärenten Nachteil gibt, die Verwendung der Methode add_to_serializer auf diese Weise zuzulassen, und ob die Veralterung zu einer Entfernung der Verwendung der Methode auf diese Weise führen wird.
Wir haben kürzlich ein neues System für ‘Plugin-Modifikatoren’ eingeführt, die sehr günstige Erweiterungspunkte sind, die DiscourseEvent ähneln, aber einen Eingabewert annehmen und einen Wert zurückgeben. In Ihrem Fall könnten Sie einen Core-PR erstellen, um einen DiscoursePluginRegistry.apply_modifier-Aufruf in der entsprechenden include_-Methode hinzuzufügen, und dann können Sie register_modifier in Ihrem Plugin verwenden, um den Wert zu überschreiben.
Es ist wahrscheinlich, dass wir es schließlich vollständig blockieren werden, ja. Außerdem möchten Sie wirklich keine Methode verwenden, die Deprecation-Hinweise in den Protokollen ausgibt.
Wenn Sie unbedingt eine Methode ohne Kooperation von Core überschreiben müssen, dann scheint modify_class die bessere Wahl zu sein. Der Hauptgrund, warum wir ein dediziertes add_to_serializer haben, ist, dass es automatisch eine include_*-Methode definiert, sodass sie nur angewendet wird, wenn das Plugin aktiviert ist.
Das bedeutet, dass der von Ihnen verlinkte Code-Snippet derzeit zwei Methoden definiert. include_wizard_required? und include_include_wizard_required?
In der Readme steht, dass sie “als Stack (First-in, First-out) funktioniert”, aber das ist eine Warteschlange. Ein Stack ist First-in, Last-out. (Ich kann nicht einmal herausfinden, wie ich den Text auf meinem Handy kopieren kann).
Es ist eher ein „Middleware-Stack“: eine Reihe von Methoden, die nacheinander ausgeführt werden und deren Ergebnis jeweils an die Eingabe der nächsten Methode weitergegeben wird.
Ich glaube nicht, dass der Versuch, LIFO/FIFO-Terminologie hier anzuwenden, funktionieren wird: Es wird nichts zum „Stack“ hinzugefügt/entfernt – es gibt kein „Out“.
Das ist irgendwie mein Problem. Ich habe eine Lücke von fast 10 Jahren, in der ich kaum noch einen Computer benutzt habe (nach über 25 Jahren Arbeit damit), und es fühlt sich an, als ob ein riesiger Wissensbereich fehlt.