Ich möchte einen Validator erstellen, ähnlich wie GitHub das Löschen von Repositories behandelt. Um das Löschen zu bestätigen, muss ich den Repo-Namen eingeben. Hier möchte ich das Löschen durch Eingabe der Entitätseigenschaft "name" bestätigen. Ich muss entweder den Namen an die Beschränkung übergeben oder auf irgendeine Weise darauf zugreifen, wie mache ich das?Benutzerdefinierter Validierer/Einschränkung mit Argumenten/Parametern in Symfony 2
5
A
Antwort
2
Sie könnte in der Tat eine Validator Einschränkung verwenden, das zu tun:
1: Erstellen einer Lösch Form (directy oder einen Typ verwendet wird):
return $this->createFormBuilder($objectToDelete)
->add('comparisonName', 'text')
->setAttribute('validation_groups', array('delete'))
->getForm()
;
2: eine öffentliche Eigenschaft hinzufügen comparisonName
in deine Entität. (oder verwenden Sie ein Proxy-Objekt), das dem entsprechenden Formularfeld oben zugeordnet wird.
3: Definieren Sie eine Klassenstufe, Callback-Validator Constraint beide Werte vergleichen:
/**
* @Assert\Callback(methods={"isComparisonNameValid"}, groups={"delete"})
*/
class Entity
{
public $comparisonName;
public $name;
public function isComparisonNameValid(ExecutionContext $context)
{
if ($this->name !== $this->comparisonName) {
$propertyPath = $context->getPropertyPath() . '.comparisonName';
$context->addViolationAtPath(
$propertyPath,
'Invalid delete name', array(), null
);
}
}
}
4: Zeigen Sie Ihr Formular aus Ihrer Sicht:
<form action="{{ path('entity_delete', {'id': entity.id }) }}">
{{ form_rest(deleteForm) }}
<input type="hidden" name="_method value="DELETE" />
<input type="submit" value="delete" />
</form>
5: Um zu überprüfen, ob die Löschabfrage gültig ist, verwenden Sie diese in Ihrem Controller:
$form = $this->createDeleteForm($object);
$request = $this->getRequest();
$form->bindRequest($request);
if ($form->isValid()) {
$this->removeObject($object);
$this->getSession()->setFlash('success',
$this->getDeleteFlashMessage($object)
);
}
return $this->redirect($this->getListRoute());
Verwandte Themen
- 1. Graylog2 mit Symfony 2 (Monolog)
- 2. Symfony Redirect mit 2 Parametern
- 3. Symfony 2 Routing mit Standardwerten
- 4. erstellen Befehl mit Symfony 2
- 5. 2 Ebene Entity Ordner in Symfony 2
- 6. Symfony 2 Array in Formular
- 7. Ordnende Entitäten mit sortierbarem Verhalten in Doktrin 2 (Symfony 2)
- 8. ein Formular mit 2 Einheiten in Symfony 2
- 9. Symfony 2 OneToMany Leistungsoptimierung
- 10. Doppelte Bestätigungsbox in Symfony 2
- 11. Wie Formularfeldwert in Symfony 2
- 12. Create ViewHelper in Symfony 2
- 13. Lookup Route in Symfony 2
- 14. Symfony 2 php.ini date.timezone
- 15. symfony 2 lesscss Pfade
- 16. Erweiterter Symfony 2-Anfragedienst?
- 17. Symfony 2: Resolve Rundschreiben
- 18. Symfony 2: Disable Monolog
- 19. Convert Symfony 2 FormType mit choice_list closure zu Symfony 3
- 20. Symfony 2 wiederverwendbare Bundles
- 21. Symfony 2 Webverzeichnis umbenennen
- 22. Symfony 2 Umleitungsroute
- 23. Symfony 2 GeniusesOfSymfony/WebSocketBundle
- 24. Symfony 2 Umleitung POST
- 25. Symfony 2 - mehrere Formulare
- 26. Symfony 2 onDelete setNull
- 27. Symfony 2 - nicht Entitätsklasse
- 28. Sylius Commerce symfony 2
- 29. Symfony kombinieren 2 Abfragen
- 30. Symfony 2 Asset-Bilder