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);
                }
            }
    • Official Post

    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);
    });
  • Ja, so mach ich es eigentlich auch. Ist aber etwas suboptimal, wenn man PackageModuleList an das Template übergibt und die Klasse selber auch noch weitere Methoden hat, die man aufrufen will. $modules wären dann eben nur noch ein Array von PackageModule.

  • 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

    • Official Post

    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.

Participate now!

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