2012-08-23 17 views
7

Symfony में मैं का उपयोग कर MIME प्रकार स्वीकार कर सकते हैं:फ़ाइल अपलोड: आवेषण का उपयोग करके एक एमआईएमई प्रकार को कैसे बाहर निकालना है?

/** 
    * @Assert\File(maxSize="10M", mimeTypes={"application/pdf", "image/png"}) 
    */ 
public $file; 

लेकिन यह कैसे मुझे लगता है कि सूची में से कुछ बाहर कर सकते हैं? मान लीजिए, मैं PHP फ़ाइलों को छोड़कर सभी अपलोडों को अनुमति देना चाहता हूं?

+1

मुझे डर है कि आप अपने खुद के बाधा बनाने की जरूरत हूँ ... – Florent

+0

हम्म, कि मैं क्या सोचा है। इसे साफ़ करने के लिए बहुत धन्यवाद। – insertusernamehere

+3

आपको ब्लैकलिस्ट की बजाय ** हमेशा ** श्वेतसूची चाहिए, बस – JamesHalsall

उत्तर

4

आप एक जोर के माध्यम से Callback constraint लागू कर सकते हैं। इस विधि का एक फायदा यह है कि आप अपने फॉर्म में किसी भी फ़ील्ड (या फ़ील्ड्स) में त्रुटि संदेश लागू कर सकते हैं।

use Symfony\Component\Validator\ExecutionContext; 

/** 
* @ORM\Entity() 
* @Assert\Callback(methods={"validateFile"}) 
*/ 
class MyEntity 
{ 

    public function validateFile(ExecutionContext $context) 
    { 
     $path = $context->getPropertyPath(); 
     if (/* $this->file is not in allowed mimeTypes ... */) { 
      $context->setPropertyPath($path . '.file'); 
      $context->addViolation("Invalid file mimetype", array(), null); 
     } 
    } 
} 
4

आपको ऐसा करने के लिए कोई कॉलबैक बनाने की आवश्यकता नहीं है। बस सुनिश्चित करें: अपने अनुप्रयोग में सच के रूप

1) सेट enable_annotations पैरामीटर/config/config.yml:

# app/config/config.yml 
framework: 
    validation:  { enable_annotations: true } 

2) अपने इकाई फ़ाइल पर ठीक से मान्यता की कमी को शामिल करें।

// YourEntity.php 
use Symfony\Component\Validator\Constraints as Assert; 

3) एनोटेशन का सही ढंग से उपयोग करें। उदाहरण:

// YourEntity.php 
/** 
* @Assert\File(
*  maxSize="5242880", 
*  mimeTypes = { 
*   "image/png", 
*   "image/jpeg", 
*   "image/jpg", 
*   "image/gif", 
*   "application/pdf", 
*   "application/x-pdf" 
*  } 
*) 
*/ 
private $arquivo; 

उपरोक्त कोड मेरे सिम्फनी 2.3.9 पर ठीक काम कर रहा है।

[] रों

+1

मुझे लगता है कि आप इस सवाल को गलत समझते हैं। ओपी को * किसी भी * माइम टाइप ** स्वीकार करने की आवश्यकता है ** लेकिन कुछ। – Touki

+0

आप सही हैं! क्षमा करें, मैं भी एक और सवाल में था और गलत जवाब दिया। मेरी गलती! =) – brunoric

संबंधित मुद्दे