Mysteriöses Verhalten von Radio Button Tag

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Antworten
proggerxy
Beiträge: 12
Registriert: 24.09.2013, 21:42:46

Mysteriöses Verhalten von Radio Button Tag

Beitrag von proggerxy » 05.01.2014, 15:39:32

Hallo Leute,

heute bin ich beim Arbeiten mit der Formular Erweiterug auf ein mysteriöses Problem gestoßen. Jetzt eröffne ich aber erstmal einen Thread im Forum, um das Problem besprechen zu können:

Wie ich schon sagte arbeite ich mit der Formular Erweiterung. Heute wollte ich die Benutzeroberfläche eines Konfigurationsbackends für eins meiner Module anfertigen.
Der betreffende Teil sieht so aus:

Code: Alles auswählen

        <p>
            <form:radio name="module--config-option" value="value1" />
            <form:label for="modules--config-option">
                <label:getstring
                    namespace="APF\modules\module\pres"
                    config="labels"
                    entry="backend.config.option.value1"
                />
            </form:label>
        </p>
        <p>
            <form:radio name="module--config-option" value="value2" />
            <form:label for="modules--config-option">
                <label:getstring
                    namespace="APF\modules\module\pres"
                    config="labels"
                    entry="backend.config.option.value2"
                />
            </form:label>
        </p>
Eigentlich dürfte da drin jetzt kein Fehler sein. Die Daten sollten jetzt in einer moduleconfig.ini gespeichert werden. Allerdings wird immer, wenn ich das Formular absende, in der für die Radio Buttons betreffenden Sektion immmer value1 gespeichert. Egal, was ich mache. Um zu schauen, wo der Fehler lag, hab ich im Controller folgende Zeilen hinzugefügt:

Code: Alles auswählen

// doccon
public function transformContent() {
   $form = $this->getForm('module-config-form');
   if ($form->isSent() && $form->isValid()) {
      var_dump($form->getFormElementByName('module--config-option')->getValue());
      var_dump($_REQUEST['module--config-option']);
      // save options in config file
   }
} 
Im Browser wurde mir jetzt folgendes ausgeben:
string(6) "value1" string(6)"value2"
Das geschah, als ich Option 2 selektiert habe.

Jetzt ist also klar, dass in der getValue()-Methode des Objekts AbstractFormControl der Fehler liegt.
Dort wird ja der Value eines Form Elements zurückgegeben.
1. Möglichkeit: es wird immer vom erst besten Form Element beim Radio Button (sind ja 2 Tags) der Wert zurückkgegeben

Meinem bescheidenem Wissen nach wird aber eigentlich der Wert des selektierten Radio Buttons zurückgegeben, sofern er mit anderen Radio Buttons in einer Gruppe ist.
Aber wenn ich mir die Preset()-Implementierung des RadioButtonTags ansehe, sollte hier auch kein Fehler auftreten. Jetzt bin ich aber mit meinem Latein am Ende, denn bin ich nun auch die Formular Erweiterung betreffend kein Experte, weshalb ich etwas Hilfe gebrauchen könnte.

LG proggerxy

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: Mysteriöses Verhalten von Radio Button Tag

Beitrag von dr.e. » 06.01.2014, 14:31:30

Hallo proggerxy,

Radio-Buttons werden - wie auch bei dir - üblicherweise in Gruppen zusammengefasst. Um den Wert eines bestimmten Feldes auslesen zu können, vergibst du am besten jeweils eine eindeutige ID und nutzt diese im Controller. Beispiel für deinen Anwendungsfall:

Template:

Code: Alles auswählen

<p>
    <form:radio id="option-1" name="module--config-option" value="value1" />
    <form:label for="modules--config-option">
        <label:getstring
            namespace="APF\modules\module\pres"
            config="labels"
            entry="backend.config.option.value1"
        />
    </form:label>
</p>
<p>
    <form:radio id="option-2" name="module--config-option" value="value2" />
    <form:label for="modules--config-option">
        <label:getstring
            namespace="APF\modules\module\pres"
            config="labels"
            entry="backend.config.option.value2"
        />
    </form:label>
</p>
Controller:

Code: Alles auswählen

public function transformContent() {
   $form = $this->getForm('module-config-form');
   if ($form->isSent() && $form->isValid()) {

      $optionOne = $form->getFormElementByID('option-1');
      $optionTwo = $form->getFormElementByID('option-2');
      var_dump($optionOne->getValue());
      var_dump($optionTwo->getValue());
      var_dump($_REQUEST['module--config-option']);

   }
} 
Hoffe das hilft dir weiter!
Viele Grüße,
Christian

proggerxy
Beiträge: 12
Registriert: 24.09.2013, 21:42:46

Re: Mysteriöses Verhalten von Radio Button Tag

Beitrag von proggerxy » 06.01.2014, 16:57:15

Und dann muss geprüft werden, welches der Formelemente das Attribut checked gesetzt hat, richtig??

Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: Mysteriöses Verhalten von Radio Button Tag

Beitrag von dr.e. » 06.01.2014, 21:13:37

Korrekt! :)

Es gibt unter http://tracker.adventure-php-framework. ... .php?id=48 einen Feature-Request, der bei der Nutzung von Radio-Buttons unterstützen kann. Da das Fearure aktuell für Release 2.1 eingeplant ist, kann es leider noch nicht genutzt werden.
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast