DatabaseObjectList::remove implementieren

  • App
    WoltLab Suite Core

    Ich würde mir eine Methode DatabaseObjectList::remove(int $objectID) wünschen, um einzelne Objekte aus einer Liste zu entfernen.


    Anwendungsfall:

    PHP
            /** @var PackageModule $module */
            foreach ($this->moduleList as $objectID => $module) {
                if (!$module->isBookable($this->package)) {
                    $this->moduleList->remove($objectID);
                }
            }
    • Offizieller Beitrag

    DatabaseObjectList ist bewusst auf einen lesenden Zugriff ausgelegt. Es wäre deutlich einfacher (und im Code nachvollziehbarer), wenn man auf gängige Methoden wie array_filter() zurückgreift.

    PHP
    $modules = \array_filter($this->moduleList->getObjects(), function (PackageModule $module) {
        return $module->isBookable($this->packageID);
    });
  • wenn man PackageModuleList an das Template übergibt und die Klasse selber auch noch weitere Methoden hat, die man aufrufen will.

    Erbe doch von der Klasse und erweitere die Conditions oder die readObjects Funktion. Zwar auch eher mau, aber notfalls möglich.

    Oder du implementierst die Funktion in deiner Klasse dann. :P

    • Offizieller Beitrag

    Ist aber etwas suboptimal, wenn man PackageModuleList an das Template übergibt und die Klasse selber auch noch weitere Methoden hat, die man aufrufen will.

    Die DatabaseObjectList ist konzeptionell ein Ersatz für das Fehlen von Generics und hat mehr den Charakter einer Collection. Zusätzlich Methoden mit entsprechender Logik sind in dedizierten Klassen oder als Methoden in der Basis-Klasse besser aufgehoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!