2012-04-01 32 views
6

Resimler için bir dosya yükleme seçeneği uygulamak için symfony.com adresinden yemek kitabı makalesini kullanıyorum.Symfony2: Dosya yüklemeyi düzenle

Şimdi diğer resimleri varlığa yüklemek istiyorum.

düzenleme için varsayılan strateji: 1. Form içine DB 2. enjekte dışına Fetch 3. Dosya yüklemeleri kullanırken nasılsa bu strateji (doktrin yürütmüyor artık çalışmıyor

Persist Olaylar

Resmi düzenlenebilir hale getirmek için başka neler yapabilirim?

cevap

10

yemek kitabı durumda sadece dosya değişiklikleri özellikle, güncellemeler işlemez. Eğer dosya yükleme her durumda ele alır, böylece elle $em->persist($entity) önce $entity->preUpload() tetiklemek gerekiyor bu nedenle bu durumda

, PreUpdate olay

+0

Hi, sağ youre. Hiçbir alan güncellenmediğinde, yaşam döngüsü geri çağırma olayları tetiklenmez :) – bodokaiser

+0

Knp Doktrini Uzantılar'ı kullanırsanız, dosya yükleme mantığını kullanan varlıkta Zaman Damgası'nı kullanabilir ve $ entity-> updateTimestamps(); $ em-> persist() 'den önce, ihtiyacınız olan kukla alanları güncelleyecektir;) –

7
(preUpload yüzden ısrarlı oluşacak $entity->path değiştirecek), tetiklenmez bir değişiklik olursa PreUpdate ve PostUpdate geri aramalar sadece tetiklenir

:

Eğer yemek kitabı olarak yaşam döngüsü yükleme yöntemini çalıştırmak sadece yükleme alanını değiştirirseniz aşağıdaki gibi bir alıntı kutuda çözüm bildirilmektedir varlığın yeminden birinde Bu devam ediyor. Bu, anlamına gelir, varsayılan olarak, yalnızca $ file özelliğini değiştirirseniz, bu olaylar tetiklenmez, çünkü özellik doğrudan Doctrine yoluyla devam eder. Bir çözüm, Doctrine için kalıcı olan ve dosyasını değiştirirken el ile değiştirmek için güncellenmiş bir alan kullanmak olacaktır. Bu duscussion tarafından önerdiği gibi

önce kontrolöre güncellemek olay olmaya devam edecek bir kukla alan eklemek:

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

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