Best Practices - Löschen Sie Links mit Symfony 2

7

In Symfony 2, welches ist der beste Weg, um einen Link zum Löschen eines Datensatzes zu erstellen?

Ich kann eine Route zu /entity/delete definieren, die nur eine DELETE -Methode akzeptiert, aber ich weiß nicht, wie man einen DELETE -Link aus einer Vorlage erstellt. Dasselbe gilt für das Erstellen von PUT -Links.

Also, was machst du? Akzeptieren Sie GET petition, um einen Datensatz zu löschen? Gibt es eine Möglichkeit, einen DELETE -Link zu erstellen?

    
mHouses 13.02.2014, 07:21
quelle

4 Antworten

9

Anker können nur GET-Anforderungen auslösen. Und da GET-Anforderungen zwischengespeichert werden können und in einigen zukünftigen Versionen (wenn Sie ernsthaftes Caching implementieren) den App-Code möglicherweise überhaupt nicht erreichen, ist es eine schlechte Übung, GET zu verwenden, um Änderungen an dem Zustand Ihrer App vorzunehmen. Hier ist, was ich in meinen Projekten mache. Mit diesen beiden können Sie in Ihren Vorlagen Folgendes tun:

%Vor%

Wie es funktioniert

Angenommen, Ihr Entity-Löschpfad lautet: /my_entity , Methoden: [DELETE]

Prinzip ist wirklich einfach. delete_link Erweiterungsmethode erstellt data-attribute auf dem Anker, so dass der kompilierte Anker wie folgt aussehen wird:

%Vor%

Wenn jemand dann auf diesen Link klickt, fängt javascript diesen Klick ein, erstellt ein Formular und löst eine DELETE-Anfrage mit der ID aus, die in data-delete-link attribut bereitgestellt wird.

Was macht es funktioniert

Hier ist, was es möglich macht, eine LinkHelper Twig-Erweiterung:

%Vor%

Und ich habe ein JavaScript in meiner Basisvorlage:

%Vor%

Einschränkungen

Dies funktioniert nur für Entitäten mit dem Primärschlüssel id . Sie können dies jedoch ganz einfach an Ihre Anforderungen anpassen und Composite-Primärschlüssel usw. unterstützen.

    
Igor Pantović 13.02.2014, 07:54
quelle
15

Symfony2 _method Funktionsbeschreibung finden Sie in So definieren Sie Routen Anforderungen Unten ist die Lösung, die ich verwende.

Link

%Vor%

Erneutes Formatieren des obigen Links nach copy-paste

Attach onClick-Ereignis-Listener:

JS

%Vor%

Controller

%Vor%

Hinweis

@CsrfProtector ist meine benutzerdefinierte Annotation, mit der das in der Anforderung übergebene CSRF-Token überprüft wird, bevor die Controller-Methode ausgeführt wird.

    
Vera 13.02.2014 08:31
quelle
2

Diese Lösungen funktionieren nicht ohne aktiviertem JavaScript. Wenn Sie nur einen "Delete Button" in Ihrem Edit-Formular benötigen, wäre es auch möglich einen zweiten Submit mit Delete Name zu erstellen und in der updateAction Ihres Controllers auf deleteAction umzuleiten, wenn der "delete-submit" Button angeklickt wurde.

    
Bernhard Zürn 21.03.2015 11:01
quelle
2

Basierend auf dem Rat von Bernhard Zürn , sehen Sie, wie man den Link ohne Javascript löscht :

1) Fügen Sie in Ihrem Formular-Generator eine zweite Schaltfläche zum Senden hinzu.

%Vor%

2) Zeigen Sie in Ihrer Zweigvorlage die Löschschaltfläche wo immer Sie möchten. In diesem Beispiel verwende ich das gleiche Formular zum Hinzufügen und Bearbeiten eines Benutzers. Also habe ich den Code in eine 'if' Bedingung gesetzt, um die Editieraktion zu erkennen.

%Vor%

3) Verwenden Sie in Ihrem Controller die Methode isClicked() der Schaltfläche zum Abfragen, wenn auf die Schaltfläche "Löschen" geklickt wurde:

%Vor%

Um weitere Fortschritte zu erzielen, können Sie vor dem Ausführen der Routenaktion die Bestätigungsnachricht Are you sure you want to delete this user ? in JavaScript hinzufügen.

    
Felurian 11.04.2016 10:31
quelle

Tags und Links