- Ich brauche eine Einschränkung benutzerdefinierte Validierung auf einem nicht zugeordneten Formularfeld
- ich die ID des Objekts ausführen müssen ist die Form, die sie aus der Betrachtung tun meine Validierung Constraint zu beseitigen Manipulation
- Anbringen der Validierung auf die Form selbst oder das nicht zugeordnete Feld gibt mir nicht genug Kontext meine Validierung Abfrage auszuführen
Ich habe ein nicht zugeordnetes Feld in meinem Person
Entitätsformular, für das ich eine Überprüfung ausführen muss. Ich habe this great article auf, wie man dies tut, aber mein Anwendungsfall ist etwas anders und nicht vollständig durch den Artikel abgedeckt.
Ich mache meine eigene Eindeutige Einschränkung, die eine benutzerdefinierte Abfrage ausführen muss, um die Eindeutigkeit zu ermitteln. Um die Abfrage auszuführen, benötige ich Zugriff auf den Feldwert, der gesendet wurde, sowie das ursprüngliche Objekt Person
(so kann ich seine ID abrufen, wenn es sich um einen Aktualisierungsvorgang handelt). Ohne das Objekt Person
zu haben, kann ich es während der Eindeutigkeitsabfrage nicht ausschließen.
Wenn ich den Validator auf der PersonType
Klasse gelten wie folgt:
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver
->setDefaults(array(
'data_class' => 'CS\AcmeBundle\Entity\Person',
'constraints' => array(
new MyUniqueValidator(),
)
))
;
}
Dann wird der Validator die gesamte Person
Objekt weitergegeben, die die Validierung durchgeführt. Das hilft mir nicht, weil die übermittelten Formulardaten nicht auf dem Person
Objekt gespeichert werden (es ist ein nicht zugeordnetes Feld, das ich handhabe, nachdem $form->isValid()
in der Steuerung aufgerufen wird).
Wenn ich die Prüfung für das nicht zugeordnete Feld gelten direkt statt:
$builder
->add('myUnmappedField', 'text', array(
'mapped' => false,
'constraints' => array(
new MyUniqueValidator(),
)
),
))
Dann wird das Objekt, das ich an den Validator übergeben bekommen ist nur die eigenständige Form Text, und nichts anderes. Ich habe nicht die ID Person
Objekt (wenn es eine Aktualisierungsoperation war), um nach Eindeutigkeitsabfrage durchzuführen.
Hoffentlich habe ich das richtig erklärt. Habe ich irgendwelche Möglichkeiten, diese Art der Validierung anmutig durchzuführen?
Danke. Ich ging mit dem Hinzufügen einer anderen Eigenschaft auf meiner Entität Person und Zuordnung des Formularfelds zu diesem. Das funktioniert gut. – Brian
Froh ich könnte helfen;) Und auch in der Zukunft, immer daran denken, eine Form kann nur ein zugrunde liegendes Objekt haben.Wenn Sie mehr als ein Objekt oder ähnliches benötigen, erstellen Sie ein anderes zusammengesetztes Objekt und es kann immer mehr Objekte/Eigenschaften enthalten :) – tomazahlin
Sicher, das funktioniert, aber das kann nicht die akzeptierte Antwort auf die Frage sein, die gestellt wurde. Das Problem ist damit nicht behoben, es wird einfach umgangen – AlexK