Formularverarbeitung

Hier finden sich Fragen und Ergänzung zur Dokumentation. // All questions and discussions about the documentation.
Antworten
Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Formularverarbeitung

Beitrag von ma2604121 » 01.04.2011, 17:51:02

Schon wieder ich... ;) Ich glaube, wenn ihr mir das APF erklärt habt, dann kann das jeder anhand meiner Beiträge nachvollziehen...

Ich habe folgendes Formular (gekürzt):

Code: Alles auswählen

<html:form id="register" name="register" class="register"">
<fieldset>
<form:error>
<p class="error">
Die eingegebenen Daten sind falsch. Bitte prüfe Deine Eingaben.
</p>
</form:error>

// Weitere Formulare

<label for="captcha">Farbe Feuerwehrauto</label><br/>
<form:text id="captcha" name="captcha" minlength="3"/><br/>

<form:button name="register" value="Registrieren"/>

<form:addvalidator
class="TextLengthValidator"
button="register"
control="captcha"
/>

<form:addfilter
class="String2LowerFilter"
button="register"
control="captcha"
/>

</fieldset>
</html:form>
Nun soll das (Captcha) im Controller überprüft, bei einem Fehler markiert und entsprechend ausgegeben werden:

Code: Alles auswählen

if ($form->isSent() && $form->isValid()) {
$captchaControl = $form->getFormElementByName('captcha');
$captcha = $captchaControl->getAttribute('value');

if ($captcha != 'rot'){
$captchaControl->markAsInvalid();
$form->transformOnPlace();
}
 
Gebe ich einen anderen Wert als "rot" ein, dann werde ich wieder zum Eingabeformular geleitet und form:error angezeigt. Allerdings wird das entsprechende Feld nicht markiert (erhält auch nicht die Klasse apf-form-error).

Was mache ich da falsch bzw. was muss ich tun, dass das Feld rot markiert wird (also die Klasse apf-form-error zugewiesen bekommt?

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: Formularverarbeitung

Beitrag von dave » 01.04.2011, 18:23:39

Also ich habe mal schnell in meinen register_controller rein geschaut, welcher auch das Captcha verwendet und ich muss nirgends das Fled manuell auf rot oder so setzen. Das macht ja zum Glück alles das APF.

Hast du folgenden Validator bei dir definiert?

Code: Alles auswählen

<form:addvalidator
    namespace="modules::captcha::pres::validator"
    class="CaptchaValidator"
    button="UserButton"
    control="Captcha"
/>

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: Formularverarbeitung

Beitrag von ma2604121 » 01.04.2011, 18:25:38

Kleines Missverständnis...

Mein "Captcha" besteht aus der Frage nach der Farbe eines Feuerwehrautos :D Es ist also nicht das Captcha des APF. Der Wert wird in einem ganz normalen Textfeld an den Controller geliefert und dort auf den richtigen Inhalt überprüft.

Ggf. müsste ich auf das Captcha des APF umsteigen.

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: Formularverarbeitung

Beitrag von dave » 01.04.2011, 18:32:16

Hey, coole Idee, mal was anderes ;)

Ich weiss, dass es da was gab ... viewtopic.php?f=10&t=601&p=5935&hilit=a ... lass#p5590
bzw. die Doku: http://adventure-php-framework.org/Seit ... alidierung

Offizielle gibts das aber ist im Release 1.14. Du kannst aber manuell schon umsteigen ;). Ich habe das noch vor mir und habe jetzt schon Angst davor :oops:

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: Formularverarbeitung

Beitrag von ma2604121 » 01.04.2011, 18:37:15

Hmmm und was bringt dann genau markAsInvalid?

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: Formularverarbeitung

Beitrag von dave » 01.04.2011, 18:45:32

Im Moment "nur", dass dein Formualr als Invalid gekennzeichnet wird.
Folglich gibt folgende Abfrage ja auch False aus:

Code: Alles auswählen

if ($form->isSent() && $form->isValid()) 

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: Formularverarbeitung

Beitrag von ma2604121 » 01.04.2011, 19:02:50

Erledigt - Fehler meinerseits...

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

Re: Formularverarbeitung

Beitrag von dr.e. » 01.04.2011, 21:38:02

Was war der Fehler genau? Nur, dass beim späteren Lesen des Threads auch eine Lösung vorhanden ist.
Hmmm und was bringt dann genau markAsInvalid?
Konzeptionell sieht das APF einen Validitäts-Status pro Feld vor. Du kannst im Controller also jedes Feld als solches markieren und deine Abfrage im Controller wird dann fehlschlagen. Parallel dazu gibt es noch einen Prozess, der es dir innerhalb eines Validators ermöglicht, das Feld optisch zu markieren (by default ist das eine zusätzliche CSS-Klasse). Dieses kannst du ab 1.14 auch im Controller direkt tun, der konzeptuell bessere Weg wäre es aber einen Validator zu schreiben, da sich dieser einfacher wiederverwenden lässt als ein Stück Code im Controller.

Da du in deinem Fall ohnehin ein spezielles Captcha baust, würde ich persönlich auch dazu tendieren einen zugehörigen Validator zu schreiben, dann ist die Kombi aus Captcha und Validator sauber in jedem Formular einsetzbar ohne dass du Controller-Code kopieren musst.
Viele Grüße,
Christian

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: Formularverarbeitung

Beitrag von ma2604121 » 01.04.2011, 22:31:27

dr.e. hat geschrieben:Was war der Fehler genau? Nur, dass beim späteren Lesen des Threads auch eine Lösung vorhanden ist.
Es ging um die Verwendung des APF-eigenen Captchas. Da hatte ich eine Fehlermeldung, welche allerdings durch mein eigenes Verschulden zustande kam. Das hatte nichts mit dem ursprünglichen Thema zu tun.
dr.e. hat geschrieben:Da du in deinem Fall ohnehin ein spezielles Captcha baust, würde ich persönlich auch dazu tendieren einen zugehörigen Validator zu schreiben, dann ist die Kombi aus Captcha und Validator sauber in jedem Formular einsetzbar ohne dass du Controller-Code kopieren musst.
Ich verwende nun das APF-Captcha (wozu etwas eigenes kreieren, wenn es so etwas schon gibt), ansonsten gebe ich Dir Recht. Ein entsprechender Validator würde Sinn machen.

Auf jeden Fall nochmals ein großes Dankeschön für die jeweils schnelle und bisher stets kompetente Hilfe!

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

Re: Formularverarbeitung

Beitrag von dr.e. » 01.04.2011, 22:35:04

Alles klar, dann passt ja alles. Wenn du Hilfe beim Implementieren von eigenen Tags & Validatoren brauchst, sag einfach Bescheid.
Auf jeden Fall nochmals ein großes Dankeschön für die jeweils schnelle und bisher stets kompetente Hilfe!
Das ist doch klar! :)
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast