Wie man CodeIgniter aufrufbar macht, wenn die Kontrollkästchen leer gelassen werden

9

Ich habe ein Problem mit meinen Formularvalidierungsregeln (in einer separaten Konfigurationsdatei). Dies geschieht mit Kontrollkästchen.

Um meine Validierungsregeln zu organisieren, habe ich eine Bibliotheksdatei namens validation_rules erstellt. Diese Bibliothek enthält alle meine benutzerdefinierten Rückrufe wie valid_date usw. Um diese Regeln aufrufen zu können, lade ich die Bibliothek und verwende dann die folgende Konfiguration:

%Vor%

Dabei ist $ci eine Referenz auf CodeIgniter ( $this ).

Nun funktioniert das für die meisten Arten von Eingaben, aber es funktioniert nicht für Kontrollkästchen, die leer gelassen werden, wahrscheinlich weil sie nicht gepostet werden.

JEDOCH, wenn ich meine Bibliothek verlasse und einfach den Callback zum Controller hinzufüge, funktioniert alles mit der folgenden Konfiguration:

%Vor%

Auch wenn ich die Regeln required irgendwo im rules -Array (oder String) anfüge, wird die required -Regel aufgerufen (gibt false zurück, da das Kontrollkästchen nicht aktiviert ist), aber alle anderen Regeln sind vollständig ignoriert.

Das muss ein Fehler in CodeIgniter sein, richtig? Hat jemand eine Lösung oder Workaround? Natürlich das ist eine Option, aber ich mag es wirklich nicht.

Relevante Dokumentation: Ссылка

Bearbeiten: Kontrollkästchen PHP / HTML:

%Vor%     
Wouter Florijn 08.09.2015, 12:09
quelle

3 Antworten

0

Okay, ich habe mein Problem behoben. Das Problem hier war, als ich einen Fehler in CodeIgniter im Zusammenhang mit Callables speziell vermutet.

HINWEIS: Dieser Fehler wurde in CI 3.0.1+ behoben. Ich habe Version 3.0.0 ausgeführt.

Das Problem

Das Problem besteht darin, dass die Form_validation-Bibliothek über einen Code in der Funktion _execute verfügt, der prüft, ob für ein nicht gebuchtes Feld eine required -Regel oder eine Callback-Regel vorhanden ist. Dies gilt für Kontrollkästchen, da sie nicht im Array $_POST enthalten sind, wenn sie leer gelassen werden. Dies ist der Code, der das Problem verursacht:

%Vor%

Dieser Code wird verwendet, um die Validierung für ein Feld vollständig zu überspringen, wenn es nicht benötigt wird oder einen Rückruf hat. Allerdings haben die CI-Entwickler den Fehler gemacht, nach Callbacks mit is_callable zu suchen. Das ist natürlich gut für normale Callables, die wie folgt strukturiert sind:

%Vor%

Aber , mit CodeIgniter können Sie Ihren Callback benennen, um Validierungsfehler wie folgt festzulegen:

%Vor%

Es überrascht nicht, dass is_callable false zurückgibt, wenn es auf dieses Array angewendet wird, und somit die Validierung übersprungen wird.

Relevante Dokumente: Ссылка

Die Lösung

Ich persönlich habe die Verwendung des oben genannten Codes nicht gesehen, weil ich die Validierung niemals überspringen möchte, wenn ein Feld nicht gepostet wird. Also habe ich das Problem gelöst, indem ich eine MY_Form_validation -Klasse erstellt und die Funktion _execute überschrieben habe, indem ich einfach den Code durch folgendes ersetzt habe:

%Vor%

Natürlich wäre eine etwas konservativere Lösung, nach mehrdimensionalen Arrays zu suchen und is_callable wie folgt auf das entsprechende Element anzuwenden:

%Vor%     
Wouter Florijn 03.12.2015, 14:29
quelle
2

Sie können Ihre Regeln in einer form_validation-Datei in / config

erstellen

application / config / form_validation.php

%Vor%

Beachten Sie die controller/method für den Schlüssel, Codeigniter wird dies verwenden, wenn Sie es nicht speziell in der aufrufenden form_validation-Funktion festlegen.

Ein Beispiel dafür wäre wie folgt

Anwendung / Controller / Shop

%Vor%

Um zu validieren, ob die Kontrollkästchen aktiviert sind, suchen wir nach dem Schlüsselwort on

application / libraries / MY_Form_validation.php

%Vor%     
Philip 17.09.2015 18:33
quelle
0
%Vor%

Ich überprüfe die erforderliche Flagge und bearbeite diese Antwort.

Bearbeiten: Versuchen Sie anstelle von required , required|isset zu verwenden, und führen Sie bei Ausführung von callback_terms_accepted Folgendes aus:

%Vor%

Das sollte den Trick machen.

Nochmals, hoffe, dass das Kumpel hilft.

    
Bob Rosset 16.09.2015 03:41
quelle