AbstractDatabaseObjectAction::readBoolean() Fehler mit (bool) Werten

  • Betroffene App
    WoltLab Suite Core

    Wenn man in einer DatabaseObjectAction einen boolschen Parameter mitgibt und diesen mit readBoolean() einliest, dann kommen falsche Ergebnisse dabei raus. Der Code funktioniert nur, wenn man 0 oder 1 oder aber 'false' oder 'true' als String übergibt. Für Sachen die per Javascript aufgerufen werden funktioniert das, aber es gibt ja auch Situationen wo man eine Action per PHP startet:


    PHP: Aufruf
    $action = new ImageAction($this->objects, 'rotate', array('force' => true);
    $action->execute();
    PHP: ImageAction::rotate()
    var_dump($this->parameters['force']); // true
    $this->readBoolean('force', true);
    var_dump($this->parameters['force']); // false

    Hier sollte wahrscheinlich noch ein is_bool hinzugefügt werden. Man kann sich zwar mit force => 1 behelfen, aber was boolean ist sollte auch boolean bleiben ;)

  • Verstehe. Und wie geht man mit optionalen Parametern um? Was in den validate*() Methoden mit read*('', true) abgefangen wird, müsste ich in den Actionmethoden dann noch mal auf isset() prüfen...

    Einmal editiert, zuletzt von Warly (21. März 2015 um 11:52)

  • Ja bei Ajax-Calls, wie du sagtest. Wenn ich die Action aber per PHP aufrufe, greift diese Default-Wert Initialisierung nicht, da ich read*() nur in den validate*() aufrufen sollte:


    PHP
    $action = new Action(array($objects), 'create', array('force' => true);
    $action->exceuteAction();
    $action2 = new Action(array($objects), 'create');
    $action2->executeAction();


    bei $action2 würde $this->paramaters['force'] mindestens eine warning ausspucken. Also muss ich in der create-Action immer folgendes drin haben:


    PHP
    if (!isset($this->parameters['force'])) {
          $this->paramaters['force'] = false;
    }


    obwohl ich in der validateCreate() das bereits per $this->readBoolean('force', true); drin hab, um Ajax-Calls zu überprüfen.

    Ich hab also die Möglichkeit den force parameter zwei mal zu überprüfen (in validateCreate() und in create()) oder jedes mal wenn ich eine Action um einen optionalen Parameter erweitere, dass ich dann alle Aufrufe dieser Action überprüfe und den Parameter bei der Initialisierung via new Action($objects, $action, $parameters) ergänze.

    Gibt es nirgends im WCF oder WBB optionale Action Parameter die per PHP aufgerufen werden?

Jetzt mitmachen!

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