2012-04-01 17 views
6

मैं छवियों के लिए फ़ाइल अपलोड विकल्प को लागू करने के लिए symfony.com से cookbook आलेख का उपयोग कर रहा हूं।Symfony2: फ़ाइल अपलोड करें

अब मैं इकाई को अन्य छवियों को लोड करना चाहता हूं।

संपादन के लिए डिफ़ॉल्ट कार्यनीति है: 1. फार्म में डीबी 2. सुई से बाहर लायें 3. जारी रहती है

किसी तरह इस रणनीति अब और जब फाइल अपलोड का उपयोग करके काम नहीं करता है (सिद्धांत पर अमल नहीं करता है घटनाएं)

चित्र संपादन के साथ लेख बनाने के लिए मैं और क्या कर सकता हूं?

उत्तर

10

रसोई की किताब नहीं अद्यतन विशेष रूप से इस मामले में जहां केवल फ़ाइल परिवर्तन में क्या करता है,।

इस मामले में, PreUpdate ईवेंट को ट्रिगर नहीं कर रहा है, तो आप इतना है कि फाइल अपलोड किसी भी मामले में संभाला जाता है, मैन्युअल $em->persist($entity) से पहले $entity->preUpload() को गति प्रदान करने की जरूरत है (preUpload $entity->path को बदल देगा तो निरंतर आ रही हो जाएगा)

+0

हाय, आप सही। जब कोई फ़ील्ड अपडेट नहीं किया जाता है तो लाइफसाइक्ल कॉलबैक ईवेंट निकाल दिए जाते हैं :) – bodokaiser

+0

यदि आप Knp DoctrineExtensions का उपयोग करते हैं, तो आप फ़ाइल अपलोड तर्क रखने वाली इकाई पर टाइमस्टैम्पबल का उपयोग कर सकते हैं और $ entity-> updateTimestamps() का उपयोग कर सकते हैं; $ em-> persist() से पहले ताकि आपको आवश्यक डमी फ़ील्ड अपडेट कर सकें;) –

7

आप केवल अपलोड क्षेत्र जीवन चक्र अपलोड विधि नहीं चला, रसोई की किताब में बदलते हैं तो नीचे के रूप में एक उद्धरण बॉक्स में समाधान बताया जाता है:

PreUpdate और PostUpdate कॉलबैक केवल ट्रिगर कर रहे हैं, अगर वहाँ एक परिवर्तन इकाई की एक फाई में से एक में एलडी जो जारी रहे हैं। इसका अर्थ है , डिफ़ॉल्ट रूप से, यदि आप केवल $ फ़ाइल प्रॉपर्टी को संशोधित करते हैं, तो इन घटनाओं को ट्रिगर नहीं किया जाएगा, क्योंकि संपत्ति स्वयं सीधे सिद्धांत के माध्यम से जारी नहीं है। एक समाधान अद्यतन क्षेत्र का उपयोग करना होगा जो कि सिद्धांत के लिए जारी है, और फ़ाइल को बदलते समय इसे मैन्युअल रूप से संशोधित करने के लिए।

के रूप में इस duscussion से सुझाव है कि इससे पहले कि नियंत्रक में अद्यतन करने के लिए घटना जारी रहती है एक डमी क्षेत्र जोड़ें:

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

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