GichUploaderBundle के साथ कोई भी फ़ाइल अपलोड करते समय यह मुखर सिम्फनी का फॉर्म सत्यापन पारित कर रहा है।

/**
 * @Vich\UploadableField(mapping="product_media", fileNameProperty="path")
 * @Assert\File(
 *     mimeTypes = {"image/jpeg", "image/gif", "image/png", "video/mp4", "video/quicktime", "video/avi"},
 *     mimeTypesMessage = "Wrong file type (jpg,gif,png,mp4,mov,avi)"
 * )
 * @var File $pathFile
 */
protected $pathFile;

मैं यह नहीं देख सकता कि समस्या मुखर के साथ क्या है। मैं VichUploader के साथ फ़ाइल प्रकारों को कैसे मान्य कर सकता हूं?

8
TMichel 1 पद 2015, 14:33

4 जवाब

सबसे बढ़िया उत्तर

आप इस समस्या को हल करने के लिए सत्यापन कॉलबैक का उपयोग कर सकते हैं।

/**
 * @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\EntityRepository")
 * @ORM\Table(name="entity")
 * @Assert\Callback(methods={"validate"})
 * @Vich\Uploadable
 */
class Entity
{
    /**
     * @Assert\File(maxSize="10M")
     * @Vich\UploadableField(mapping="files", fileNameProperty="fileName")
     *
     * @var File $file
     */
    protected $file;

    /**
     * @ORM\Column(type="string", length=255, name="file_name", nullable=true)
     *
     * @var string $fileName
     */
    protected $fileName;

...

    /**
     * @param ExecutionContextInterface $context
     */
    public function validate(ExecutionContextInterface $context)
    {
        if (! in_array($this->file->getMimeType(), array(
            'image/jpeg',
            'image/gif',
            'image/png',
            'video/mp4',
            'video/quicktime',
            'video/avi',
        ))) {
            $context
                ->buildViolation('Wrong file type (jpg,gif,png,mp4,mov,avi)')
                ->atPath('fileName')
                ->addViolation()
            ;
        }
    }
}
4
Mikhail Prosalov 15 पद 2015, 05:22

सिम्फनी 4.0 के लिए आपको वैलिडेटर घटक आयात करना होगा

composer require validator

अब आपके इकाई वर्ग में आप @ एसेटर एनोटेशन का उपयोग कर सकते हैं।

// src/Entity/Author.php

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

class Author
{
    /**
     * @Assert\NotBlank()
     */
    public $name;
}

आपको अपने कॉन्फिगरेशन / पैकेज / फ्रेमवर्क में कुछ कॉन्फ़िगरेशन जोड़ने की जरूरत पड़ सकती है। वैसे भी, यह सब पूरी तरह से आधिकारिक सिम्फनी प्रलेखन पर समझाया गया है।

http://symfony.com/doc/current/validation.html

माइम प्रकार की जांच करने के लिए आपको फ़ाइल का उपयोग करना होगा। symfony.com/doc/current/reference/constraints/File.html

यहां काम करने की छूट है

/**
 * @ORM\Column(type="string", length=255)
 * @var string
 */
private $cvFilename;

/**
 * @Assert\File(
 *     maxSize = "2048k",
 *     mimeTypes = {"application/pdf", "application/x-pdf"},
 *     mimeTypesMessage = "Please upload a valid PDF"
 * )
 * @Vich\UploadableField(mapping="cv", fileNameProperty="cvFilename")
 * @var File
 */
private $cvFile;

अब यह सच है कि यहाँ वर्णित @Vich \ UploadableField एनोटेशन के अंदर एक माइम और आकार विकल्प है https://github.com/dustin10/VichUploaderBundle/blob/master-Resources/doc/usage.md#step -2- लिंक - से-अपलोड करें -मैपिंग करने वाली एक इकाई लेकिन मुझे यह काम नहीं मिला।

@Assert एनोटेशन फ़ॉर्म त्रुटियां उत्पन्न करेगा, कि आप प्रतिक्रिया देने के लिए उन्हें ट्विग में पुनः प्राप्त कर सकते हैं।

कुंजी का उपयोग करना है: form_errors(candidature_form.cvFile)

यहाँ एक काम कर उदाहरण है:

 {% set error_flag = form_errors(candidature_form.cvFile) %}

        <label class=" {% if error_flag %}has-error{% endif %}">
            Curriculum Vitae (PDF)
        </label>
        {{ form_widget(candidature_form.cvFile) }}
        {% if error_flag %}
            <div class="has-error">
                {{ form_errors(candidature_form.cvFile) }}
            </div>
        {% endif %}
4
Kaizoku Gambare 16 जिंदा 2018, 15:39

सिम्फनी 4.x के लिए, यह समाधान काम नहीं कर रहा है। मैं नहीं जानता कि मुखर या घटना के सत्यापनकर्ता कभी फोन क्यों नहीं करते ...

मुझे यह हल मिल गया है: संबंध क्षेत्रों पर काम नहीं करता है

         use Symfony\Component\Validator\Constraints\File;
        /* ... */
        ->add('ba_file', VichFileType::class, [
                'label' => 'Bon d\'adhésion (PDF file)',
                'required' => false,
                'constraints' => [
                    new File([
                        'maxSize' => '5M',
                        'mimeTypes' => [
                            'image/jpeg',
                            'image/gif',
                            'image/png',
                        ]
                    ])
                ]
            ])
2
Sinelc 17 जिंदा 2019, 16:05

सिम्फनी 3.0 + के लिए, केवल 2 चीजों को करने की आवश्यकता है:

  • आयात करने के लिए उपयोग कथन जोड़ें ExecutionContextInterface

  • वर्ग के बजाय विधि / फ़ंक्शन में कॉलबैक एनोटेशन को सीधे जोड़ा जाना है।

    use Symfony\Component\Validator\Context\ExecutionContextInterface;
    
    /**
    * @Assert\File(maxSize="2M")
    * @Vich\UploadableField(mapping="profile_image", fileNameProperty="avatar")
    * @var File
    */
    private $imageFile;
    
    /**
    * @ORM\Column(length=255, nullable=true)
    * @var string $avatar
    */
    protected $avatar;
    
    /**
    * @Assert\Callback
    * @param ExecutionContextInterface $context
    */
    public function validate(ExecutionContextInterface $context, $payload)
    {
       // do your own validation
       if (! in_array($this->imageFile->getMimeType(), array(
           'image/jpeg',
           'image/gif',
           'image/png'
    ))) {
        $context
            ->buildViolation('Wrong file type (only jpg,gif,png allowed)')
            ->atPath('imageFile')
            ->addViolation();
       }
    }
    
1
Niket Pathak 14 मार्च 2017, 00:27