View Issue Details

IDProjectCategoryView StatusLast Update
0000344Adventure PHP FrameworkBugpublic2019-03-18 08:34
ReporterGeneral CrimeAssigned ToChristianAchatz 
PrioritynormalSeveritymajorReproducibilityalways
Status assignedResolutionopen 
Product Version4.0 
Target Version4.1Fixed in Version 
Summary0000344: Merkwürdiges verhalten form:checkbox in form:block
DescriptionHallo,
leider hab ich noch nicht 100% aussagekräftige angaben aber vielleicht hilft ja ein zweiter Augenpaar.

In meinen form:block Elementen sind form:checkbox elemente.
Wenn ich jedoch den Status abfrage "isChecked" bekommen ich immer FALSE zurück obwohl die elemente checked sind. wenn ich sie in html mit checked="checked" befülle sind sie immer TRUE obwohl ich sie deaktiviere.
TagsNo tags attached.
Codereferenz: ([Datei]:[Zeile])
Namespacetools

Activities

ChristianAchatz

2019-02-04 19:41

administrator   ~0000894

Ich habe versucht, das Problem lokal nachzustellen. Folgendes Setup:

Template:
*********
<html:form>
      <form:block
            name="checkbox-block"
            namespace="DEV\wizard\templates\pages\form-group"
            template="block-with-checkboxes"
      />
</html:form>

Block-Template:
**************


   <html:placeholder name="checkbox-foo-place-holder" />



   <label for="checkbox-foo-1">Value 1</label>
   <form:checkbox name="checkbox-block-foo-1" id="checkbox-block-foo-1" value="1" />



   <label for="checkbox-foo-2">Value 2 (checked by default)</label>
   <form:checkbox name="checkbox-block-foo-2" id="checkbox-block-foo-2" value="2" checked="checked"/>



Controller:
*********
$blockCbOne = $form->getFormElementByID('checkbox-block-foo-1');
$blockCbTwo = $form->getFormElementByID('checkbox-block-foo-2');

$form->getFormElementByName('checkbox-block')
      ->setPlaceHolder(
            'checkbox-foo-place-holder',
            'Checkbox one in block checked: ' . ($blockCbOne->isChecked() ? 'true' : 'false')
            . '
Checkbox two in block checked: ' . ($blockCbTwo->isChecked() ? 'true' : 'false')
      );

Rufe ich das Formular auf, so erhalte ich folgende Ausgabe:

Checkbox one in block checked: false
Checkbox two in block checked: true

Aktiviere ich Checkbox 1, deaktiviere im gleichen Schritt Checkbox 2 und schicke das Formular ab erhalte ich folgende Ausgabe:

Checkbox one in block checked: true
Checkbox two in block checked: false

In allen anderen Fällen verhält sich der Block ebenfalls korrekt.

Auch mit dynamischer Befüllung der Feld-IDs und -Namen ist das Verhalten identisch. Hier mein geändertes Setup:

Template:
*********
<form:block
      name="checkbox-block"
      namespace="DEV\wizard\templates\pages\form-group"
      template="block-with-checkboxes"
      block-name-one="checkbox-block-foo-1"
      block-name-two="checkbox-block-foo-2"
/>

Block-Template:
**************


   <html:placeholder name="checkbox-foo-place-holder" />



   <label for="${name-one}">Value 1</label>
   <form:checkbox name="${name-one}" id="${name-one}" value="1" />



   <label for="${name-two}">Value 2 (checked by default)</label>
   <form:checkbox name="${name-two}" id="${name-two}" value="2" checked="checked"/>



Hoffe das hilft dir!

ChristianAchatz

2019-02-11 19:38

administrator   ~0000909

Hast du schon Feedback für mich?

General Crime

2019-02-11 20:09

developer   ~0000910

Komme erst kommendes wochenende dazu die letzten hab ich mit apf4 und 7.* updates verbracht

ChristianAchatz

2019-02-11 22:01

administrator   ~0000911

Alles klar, danke! :)

Lass mich auch gerne wissen, wie es dir mit dem Update auf APF 4 ergangen ist.

General Crime

2019-02-22 10:30

developer   ~0000912

Hallo,
leider wird das wetter schöner da ist man dann ehr drausen wenn mal Zeit ist.
Ich hoffe das ich es dieses WE schaffe, da ich sogar merkwürdiges bei $FormField->isChecked() beobachtet hab (war immer false).
Entweder läuft bei mir da was nicht oder keine Ahnung, ich muss mal ne Sandbox erstellen.

General Crime

2019-03-08 13:22

developer   ~0000913

Last edited: 2019-03-08 13:41

View 2 revisions

Hallo, ich nehme mir grad zwanghaft die Zeit mal drüber zu schauen.
Habe nun zumindest raus gefunden das es bei mehr als 1 Block auftaucht.

1. alle Blöcke raus genommen außer dem wo die Checkboxen sind. => Verhalten war wie zu erwarten
2. Alle anderen Blöcke wieder eingebunden => kein checked status.

Ich hoffe das ich noch mehr raus finde Poste das hier aber schon mal bevor ich es vergesse.

PS:
So nachdem ich nun stück für Stück alle Blöcke wieder aktiviert hatte um zu sehen wo der Fehler ist aber nichts passierte... war der letzte punkt der Submit Button der zum testen nun ich den block wanderte wo meine test Checkboxen sind.
Habe ich diesen nun wieder in das letzte Block Element verschoben waren die Checkboxen wieder fehlerhaft.

Ich habe den Button nun außerhalb alle Blocke gelegt und oh graus der selbe Fehler ist vorhanden.
Ich hoffe das hilft leider hab ich momentan wieder weniger Zeit um die Ursache nun weiter zu ergründen bzw. du kennst das APF besser wo man ansetzen muss.

General Crime

2019-03-08 16:20

developer   ~0000914

Hier mal mein schnellen keinen test aus dem Sandbox.
Keine der Checkboxen hat beim verändern den richtigen status.

ChristianAchatz

2019-03-08 19:55

administrator   ~0000915

Vielen Dank für die Beispiel-Dateien!

Ich konnte den Fehler nun nachvollziehen. Ursache liegt im Statement

$form->isSent()

in CheckBoxTag.php:46. Dort wird der Sende-Zustand des Formulars abgefragt, dieser liefert in diesem Setting immer "false" und damit werden die Checkboxen wie im Template definiert initialisiert (=Ausgangszustand).

Die Abfrage von $form->isSent() funktioniert an dieser Stelle leider nicht, da der Button zu diesem Zeitpunkt noch nicht initialisiert wurde. Definiere eine Checkbox außerhalb eines Form-Blocks, so lässt sich das Verhalten nicht mehr nachvollziehen:

   <form:block namespace="DEV\wizard\templates\pages\form-block" template="block-checkbox"/>
   <form:block namespace="DEV\wizard\templates\pages\form-block" template="block-other"/>

   <fieldset>
      <legend>Block 3</legend>
      <form:checkbox name="Checkbox5" value="1"/>Checkbox 5 (Uncheck)

   </fieldset>

   <form:button name="action" value="Senden"/>

Ebenso ist das Verhalten nicht nachvollziehbar, wenn ich den Button an den Anfang des Formulars stelle:

   <form:button name="action" value="Senden"/>

   <form:block namespace="DEV\wizard\templates\pages\form-block" template="block-checkbox"/>
   <form:block namespace="DEV\wizard\templates\pages\form-block" template="block-other"/>

Ich verstehe nun das Problem und arbeite an einer Lösung. Meine Vermutung ist, dass der ReusableFormBlockTag sein

$this->extractTagLibTags();

erst in der onAfterAppend() ausführen darf um das zu unterstützen.

Ich melde mich mit einem Update!

ChristianAchatz

2019-03-08 20:01

administrator   ~0000916

Versuche mal den Fall mit dem angehängten Patch nachzuvollziehen. Bei mir lokal kann ich den Fehler nach der Änderung nicht mehr nachvollziehen. Auch die Unit-Tests laufen durch.

General Crime

2019-03-08 22:49

developer   ~0000917

Heyho ist ja doch etwas tricky...

Test 1: Mit meinen Testdaten
Läuft alles super auch sind die boxen nun wie alles andere auch nach nem error/success weiterhin ausgefüllt.

Test 2: mit den test live daten
Läuft auch super jedoch waren diese wie test 1 nur mit mehr krimskrams drin.

Test 3 mit dem wirklichen echten Formular:
Läuft nicht weil der Button zum senden in einem Formblock sitzt. Warum ich das habe? Ich habe ein modal mit meheren Tabs. In jedem Tab sind viele Formularelemente und ein Button der mittels JS umblättert zur nächsten Seite. Auf der letzten wird dann das Senden angezeigt. Da es am Timing liegt denke ich das man sowas nicht lösen kann!?

Test 4 Button im form Block mit den getesteten Chechboxen:
Dies läuft nur denke ich das hier nur dann die boxen aus dem Block laufen? Weitere test nicht durchgeführt.

General Crime

2019-03-17 16:03

developer   ~0000918

Hey wie siehts aus!?

ChristianAchatz

2019-03-17 20:36

administrator   ~0000919

Hi!

Ich war in dieser Woche im Urlaub, daher habe ich dir noch nicht geantwortet - sorry! :)

Die neue Implementierung deckt ein paar mehr Anwendungsfälle ab, leider offenbar noch nicht alle. Ich vermute, dass die Implementierung über den Absende-Status damit leider nicht (mehr) so funktioniert und wir eine andere Lösung benötigen. Wenn ich die Problematik richtig im Kopf habe, müsste nicht nur der Form-Block mit onAfterAppend() arbeiten, sondern auch die Checkbox.

Ich schaue mir den dritten Fall in dieser Woche auf jeden Fall an!

General Crime

2019-03-18 08:34

developer   ~0000922

Hallo,
hoffe Du hattest einen schönen Urluab.
Hab auch grad gesehen das der Bearbeiter ich war, ich hab das mal geändert.

Issue History

Date Modified Username Field Change
2019-01-27 11:37 General Crime New Issue
2019-01-27 17:30 ChristianAchatz Target Version 4.0 => 4.1
2019-02-04 19:41 ChristianAchatz Note Added: 0000894
2019-02-04 19:42 ChristianAchatz Assigned To => General Crime
2019-02-04 19:42 ChristianAchatz Status new => feedback
2019-02-11 19:38 ChristianAchatz Note Added: 0000909
2019-02-11 20:09 General Crime Note Added: 0000910
2019-02-11 22:01 ChristianAchatz Note Added: 0000911
2019-02-22 10:30 General Crime Note Added: 0000912
2019-03-08 13:22 General Crime Note Added: 0000913
2019-03-08 13:41 General Crime Note Edited: 0000913 View Revisions
2019-03-08 16:20 General Crime Note Added: 0000914
2019-03-08 19:55 ChristianAchatz Note Added: 0000915
2019-03-08 20:01 ChristianAchatz Note Added: 0000916
2019-03-08 22:49 General Crime Note Added: 0000917
2019-03-17 16:03 General Crime Note Added: 0000918
2019-03-17 20:36 ChristianAchatz Note Added: 0000919
2019-03-18 08:34 General Crime Assigned To General Crime => ChristianAchatz
2019-03-18 08:34 General Crime Note Added: 0000922
2019-03-18 08:34 General Crime Status feedback => assigned