Ich versuche, die Option "exclude" für einen Db_NoRecordExists-Validator zu verwenden, denn wenn ich das Element "bearbeite", gibt es immer wieder einen "duplizierten" Fehler zurück, wie üblich.
Ich möchte dem Formular mitteilen, dass der Wert, der vom Controller selbst an das Formular übergeben wird, zurückgehalten wird ...
Dies ist der Controller:
%Vor%Dies ist das Formular:
%Vor%// ... schneiden ...
Einige Ratschläge?
Ich hatte ein ähnliches Problem. Meine Lösung bestand darin, den Validator von init
in die Funktion isValid
zu verschieben.
Was ich mache, vor der Validierungslogik im Controller, füge ich den folgenden Code hinzu, um das Feld mit den aktuellen Benutzerdaten zu vergleichen. Wenn es eine Übereinstimmung ist, entferne ich einfach den Validator von dem Element wie folgt:
%Vor%An diesem Punkt wird die isValid-Logik kein Problem passieren.
%Vor%Viel Spaß!
Ich mochte die Lösung nicht, die Funktion isValid () außer Kraft zu setzen. Es fühlt sich an, als würden wir nicht verstehen, wie der Db_NoRecordExists Validator funktioniert. Sie müssen dem Validierer lediglich die tatsächliche ID des auszuschließenden Datensatzes angeben, bevor Sie isValid () aufrufen. Der Validator bietet sogar einen Accessor, um diesen Wert in sich selbst zu setzen! Die Zend-Anweisungen helfen auch nicht so gut, wie sie es könnten, also ist es nicht überraschend, dass die Leute damit kämpfen.
Hier ist eine elegantere und work-flow-orientierte Methode zum Festlegen des Ausschlusses, ohne das Formular zu hacken, zu erweitern oder zu überschreiben:
%Vor%Der Ausschluss ist eigentlich ein Array unseres Feldes und Wertes. Wir teilen dem Validator gerade vor dem Aufruf von isValid () mit, was er ausschließen soll. Erledigt. Einfach.
Nehmen Sie diese Änderungen am Formular vor:
%Vor%Und zu der Bearbeitungsaktion:
%Vor%Tags und Links php zend-framework zend-form zend-validate