File

Valida che un valore sia un file valido, che può essere uno dei seguenti:

  • Una stringa (o oggetto con metodo __toString()) con un percorso di un file esistente;
  • Un oggetto Symfony\Component\HttpFoundation\File\File valido (inclusi oggetti della classe Symfony\Component\HttpFoundation\File\UploadedFile).

Questo vincolo si usa solitamente in form con il tipo di form file.

Suggerimento

Se il file da validare è un’immagine, prrovare il vincolo Image.

Si applica a proprietà o metodo
Opzioni
Classe Symfony\Component\Validator\Constraints\File
Validatore Symfony\Component\Validator\Constraints\FileValidator

Uso di base

Questo vincolo si usa solitamente su una proprietà che sarà resa in un form come tipo di form file. Per esempio, si supponga di aver creato un form autore, in cui si possa caricare un file PDF con una biografia. In tale form, la proprietà bioFile è di tipo file. La classe Author potrebbe essere come la seguente:

// src/Acme/BlogBundle/Entity/Author.php
namespace Acme\BlogBundle\Entity;

use Symfony\Component\HttpFoundation\File\File;

class Author
{
    protected $bioFile;

    public function setBioFile(File $file = null)
    {
        $this->bioFile = $file;
    }

    public function getBioFile()
    {
        return $this->bioFile;
    }
}

Per assicurarsi che l’oggetto File bioFile sia valido e che sia al di sotto di una certa dimensione e un PDF valido, aggiungere il seguente:

  • YAML
    # src/Acme/BlogBundle/Resources/config/validation.yml
    Acme\BlogBundle\Entity\Author:
        properties:
            bioFile:
                - File:
                    maxSize: 1024k
                    mimeTypes: [application/pdf, application/x-pdf]
                    mimeTypesMessage: Please upload a valid PDF
    
  • Annotazioni
    // src/Acme/BlogBundle/Entity/Author.php
    namespace Acme\BlogBundle\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Author
    {
        /**
         * @Assert\File(
         *     maxSize = "1024k",
         *     mimeTypes = {"application/pdf", "application/x-pdf"},
         *     mimeTypesMessage = "Please upload a valid PDF"
         * )
         */
        protected $bioFile;
    }
    
  • XML
    <!-- src/Acme/BlogBundle/Resources/config/validation.xml -->
    <?xml version="1.0" encoding="UTF-8" ?>
    <constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
    
        <class name="Acme\BlogBundle\Entity\Author">
            <property name="bioFile">
                <constraint name="File">
                    <option name="maxSize">1024k</option>
                    <option name="mimeTypes">
                        <value>application/pdf</value>
                        <value>application/x-pdf</value>
                    </option>
                    <option name="mimeTypesMessage">Please upload a valid PDF</option>
                </constraint>
            </property>
        </class>
    </constraint-mapping>
    
  • PHP
    // src/Acme/BlogBundle/Entity/Author.php
    namespace Acme\BlogBundle\Entity;
    
    use Symfony\Component\Validator\Mapping\ClassMetadata;
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Author
    {
        public static function loadValidatorMetadata(ClassMetadata $metadata)
        {
            $metadata->addPropertyConstraint('bioFile', new Assert\File(array(
                'maxSize' => '1024k',
                'mimeTypes' => array(
                    'application/pdf',
                    'application/x-pdf',
                ),
                'mimeTypesMessage' => 'Please upload a valid PDF',
            )));
        }
    }
    

La proprietà bioFile è validata per garantire che sia un vero file. Anche la sua dimensione e il suo tipo mime sono validati, perché le opzioni appropriate sono state specificate.

Opzioni

maxSize

Nuovo nella versione 2.6: I suffissi Ki e Mi sono stati introdotti in Symfony 2.6.

tipo: mixed

Se impostata, la dimensione del file sottostante deve essere inferiore, per essere valido. La dimensione del file può essere fornita in uno dei seguenti formati:

Suffisso Nome unità valore p.e.
  byte 1 byte 4096
k kilobyte 1000 byte 200k
M megabyte 1000000 byte 2M
Ki kibibyte 1024 byte 32Ki
Mi mebibyte 1048576 byte 8Mi

Per maggiori informazioni sulla differenza tra prefissi binari e SI, vedere Wikipedia: prefissi binari.

binaryFormat

Nuovo nella versione 2.6: L’opzione binaryFormat è stata introdotta in Symfony 2.6.

tipo: booleano predefinito: null

Se true, le dimensioni saranno mostrate nei messaggi con unità con prefisso binario (KiB, MiB). Se false, le dimensioni saranno mostrate nei messaggi con unità con prefisso SI (kB, MB). Se null, il formato sarà indovinato dal valore definito nell’opzione maxSize.

Per maggiori informazioni sulla differenza tra prefissi binari e SI, vedere Wikipedia: prefissi binari.

mimeTypes

tipo: array o stringa

Se impostata, il validatore verificherà che il tipo mime del file sottostante sia uguale al tipo mime dato (se stringa) o esista nell’insieme dei tipi mime dati (se array).

Si può trovare una lista di tipi mime esistenti sul sito web di IANA

maxSizeMessage

tipo: stringa predefinito: The file is too large ({{ size }}). Allowed maximum size is {{ limit }}

Messaggio mostrato se il file è più grande dell’opzione maxSize.

mimeTypesMessage

tipo: stringa predefinito: The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}

Messaggio mostrato se il tipo mime del file non è un tipo mime valido, in base all’opzione mimeTypes.

disallowEmptyMessage

Nuovo nella versione 2.6: L’opzione disallowEmptyMessage è stata introdotta in Symfony 2.6. Prima della 2.6, se l’utente caricava un file vuoto, non si verificava alcun errore di validazione.

tipo: stringa predefinito: An empty file is not allowed.

Questo vincolo verifica se il file caricato sia vuoto (cioè 0 byte). Nel caso, viene mostrato questo messaggio.

notFoundMessage

tipo: stringa predefinito: The file could not be found

Messaggio mostrato se non viene trovato alcun file nel percorso fornito. Questo errore può avvenire solo in caso di valore stringa, perché un oggetto File non può essere costruito con un percorso non valido.

notReadableMessage

tipo: stringa predefinito: The file is not readable

Messaggio mostrato se il file esiste, ma la funzione is_readable di PHP fallisce, quando gli si passa il percorso del file.

uploadIniSizeErrorMessage

tipo: stringa predefinito: The file is too large. Allowed maximum size is {{ limit }}

Messaggio mostrato se il file caricato è più grande dell’impostazione upload_max_filesize di php.ini.

uploadFormSizeErrorMessage

tipo: stringa predefinito: The file is too large

Messaggio mostrato se il file caricato è più grande di quanto consentito dal campo input HTML.

uploadErrorMessage

tipo: stringa predefinito: The file could not be uploaded

Messaggio mostrato se il file caricato non può essere caricato per una ragione sconosciuta, per esempio se il file non può essere scritto su disco.

Tabella dei contenuti

Argomento precedente

Country

Argomento successivo

Image

Questa pagina