2012-04-01 8 views
6

Ich verwende den Kochbuch-Artikel von symfony.com, um eine Datei-Upload-Option für Bilder zu implementieren.Symfony2: Datei-Upload bearbeiten

Jetzt möchte ich andere Bilder auf die Entität laden.

Die Standardstrategie für die Bearbeitung ist: 1. aus DB in Formular 2. Inject Fetch 3.

Persist

Irgendwie diese Strategie funktioniert nicht mehr, wenn das Hochladen von Dateien verwenden (Lehre nicht ausgeführt die Ereignisse)

Was könnte ich noch tun, um die Artikel mit Bild editierbar zu machen?

Antwort

10

Das Kochbuch tut nicht behandelt Updates, insbesondere in dem Fall, wo nur die Datei ändert.

In diesem Fall wird die PreUpdate Ereignis nicht ausgelöst wird, so dass Sie $entity->preUpload() manuell vor dem $em->persist($entity) auslösen müssen, so dass die Datei-Upload in jedem Fall behandelt wird (preUpload wird $entity->path verändern, so wird die persistierende auftreten)

+0

Hallo, youre Recht. Wenn kein Feld aktualisiert wird, werden die Lifecycle-Callback-Ereignisse nicht ausgelöst :) – bodokaiser

+0

Wenn Sie die Knp DoctrineExtensions verwenden, können Sie Timestampable für die Entität verwenden, die die Datei-Upload-Logik enthält, und $ entity-> updateTimestamps(); vor $ em-> persist(), damit die Dummy-Felder aktualisiert werden;) –

7

wenn Sie der Lebenszyklus nicht nur den Upload-Bereich ändern, um die Upload-Methode, im Kochbuch ausgeführt wird, um die Lösung in einem Zitat Feld wie unten angegeben:

Rückrufe werden nur die Preupdate und PostUpdate dort ausgelöst, wenn eine Änderung in einer der Entitäten ld das ist hartnäckig. Das bedeutet dass standardmäßig, wenn Sie nur die $ file -Eigenschaft ändern, diese Ereignisse nicht ausgelöst werden, da die Eigenschaft selbst nicht direkt über Doctrine beibehalten wird. Eine Lösung wäre, ein aktualisiertes Feld zu verwenden, das in Doctrine beibehalten wird, und es manuell zu ändern, wenn die Datei geändert wird.

ein Dummy-Feld hinzufügen, in der Steuerung vor bestehen bleibt Ereignis zu aktualisieren, da dieses duscussion vorschlagen:

https://github.com/symfony/symfony-docs/pull/564

public function setFile(UploadedFile $file) 
{ 
    $this->file = $file; 
    $this->updatedAt = new \DateTime(); 
}