Image

Questo vincolo funziona esattamente come File, tranne per il fatto che le opzioni mimeTypes e mimeTypesMessage sono impostate automaticamente per lavorare specificatamente su file di tipo immagine.

Inoltre, da Symfony 2.1, ha delle opzioni che consentono di validare larghezza e altezza dell’immagine.

Nuovo nella versione 2.4: Da Symfony 2.4, si può anche validare il rapporto tra le dimensioni dell’immagine (cioè width / height) e consentire orientamenti quadrato, panorama e ritratto.

Vedere il vincolo File per la documentazione completa su questo vincolo.

Si applica a proprietà o metodo
Opzioni
Classe Symfony\Component\Validator\Constraints\Image
Validatore Symfony\Component\Validator\Constraints\ImageValidator

Uso di base

Questo vincolo si usa solitamente su una proprietà che sarà resa in un form come tipo file. Per esempio, si supponga di creare un form per un autore, in cui si può caricare una sua immagine in primo piano. Nel form, la proprietà headshot sarebbe di tipo file. La classe Author potrebbe assomigliare a questa:

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

use Symfony\Component\HttpFoundation\File\File;

class Author
{
    protected $headshot;

    public function setHeadshot(File $file = null)
    {
        $this->headshot = $file;
    }

    public function getHeadshot()
    {
        return $this->headshot;
    }
}

Per assicurare che l’oggetto headshot sa un’immagine valida e che sia entro certe dimensioni, aggiungere il seguente:

  • YAML
    # src/Acme/BlogBundle/Resources/config/validation.yml
    Acme\BlogBundle\Entity\Author
        properties:
            headshot:
                - Image:
                    minWidth: 200
                    maxWidth: 400
                    minHeight: 200
                    maxHeight: 400
    
  • Annotazioni
    // src/Acme/BlogBundle/Entity/Author.php
    namespace Acme\BlogBundle\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Author
    {
        /**
         * @Assert\Image(
         *     minWidth = 200,
         *     maxWidth = 400,
         *     minHeight = 200,
         *     maxHeight = 400
         * )
         */
        protected $headshot;
    }
    
  • 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="headshot">
                <constraint name="Image">
                    <option name="minWidth">200</option>
                    <option name="maxWidth">400</option>
                    <option name="minHeight">200</option>
                    <option name="maxHeight">400</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('headshot', new Assert\Image(array(
                'minWidth' => 200,
                'maxWidth' => 400,
                'minHeight' => 200,
                'maxHeight' => 400,
            )));
        }
    }
    

La proprietà headshot è validata per assicurare che sia una vera immagine e e che abbia altezza e larghezza entro i limiti.

Si potrebbe anche voler garantire che l’immagine headshot sia quadrata. In tal caso, si possono disabilitare gli orientamenti panorama e ritratto, come mostrato nel seguente codice:

  • YAML
    # src/Acme/BlogBundle/Resources/config/validation.yml
    Acme\BlogBundle\Entity\Author
        properties:
            headshot:
                - Image:
                    allowLandscape: false
                    allowPortrait: false
    
  • Annotazioni
    // src/Acme/BlogBundle/Entity/Author.php
    namespace Acme\BlogBundle\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    
    class Author
    {
        /**
         * @Assert\Image(
         *     allowLandscape = false
         *     allowPortrait = false
         * )
         */
        protected $headshot;
    }
    
  • XML
    <!-- src/Acme/BlogBundle/Resources/config/validation.xml -->
    <class name="Acme\BlogBundle\Entity\Author">
        <property name="headshot">
            <constraint name="Image">
                <option name="allowLandscape">false</option>
                <option name="allowPortrait">false</option>
            </constraint>
        </property>
    </class>
    
  • 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('headshot', new Assert\Image(array(
                'allowLandscape'    => false,
                'allowPortrait'     => false,
            )));
        }
    }
    

Si possono mischiare tutte le opzioni dei vincoli, creando regole di validazione potenti.

Opzioni

Questo vincolo condivide tutte le sue opzioni con il vincolo File. Tuttavia, modifica due dei valori predefiniti delle opzioni e aggiunge diverse altre opzioni:

mimeTypes

tipo: array o stringa predefinito: image/*

Una lista di tipi mime è disponibile sul sito web di IANA

mimeTypesMessage

tipo: stringa predefinito: This file is not a valid image

minWidth

tipo: intero

Se impostato, la larghezza del file immagine deve essere maggiore o uguale di questo valore in pixel.

maxWidth

tipo: intero

Se impostato, la larghezza del file immagine deve essere minore o uguale di questo valore in pixel.

minHeight

tipo: intero

Se impostato, l’altezza del file immagine deve essere maggiore o uguale di questo valore in pixel.

maxHeight

tipo: intero

Se impostato, l’altezza del file immagine deve essere minore o uguale di questo valore in pixel.

maxRatio

tipo: float

Se impostato, il rapporto width / height del file immagine deve essere minore o uguale a questo valore.

minRatio

tipo: float

Se impostato, il rapporto width / height del file immagine deve essere maggiore o uguale a questo valore.

allowSquare

tipo: Booleano predefinito: true

Se questa opzione è false, l’immagine non può essere quadrata. Se si vuole forzare un’immagine quadrata, lasciare questa opzione a true e impostare allowLandscape e allowPortrait a false.

allowLandscape

tipo: Booleano predefinito: true

Se questa opzione è false, l’immagine non può avere orientamento panorama.

allowPortrait

tipo: Booleano predefinito: true

Se questa opzione è false, l’immagine non può avere orientamento ritratto.

sizeNotDetectedMessage

tipo: stringa predefinito: The size of the image could not be detected

Se il sistema non è in grado di determinare la dimensione dell’immagine, sarà mostrato questo errore. Questo si verificherà solo se almeno uno dei quattro vincoli di dimensione è stato impostato.

maxWidthMessage

tipo: stringa predefinito: The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px

Il messaggio di errore se la larghezza dell’immagine eccede maxWidth.

minWidthMessage

tipo: stringa predefinito: The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px

Il messaggio di errore se la larghezza dell’immagine è inferiore a minWidth.

maxHeightMessage

tipo: stringa predefinito: The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px

Il messaggio di errore se l’altezza dell’immagine eccede maxHeight.

minHeightMessage

tipo: stringa predefinito: The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px

Il messaggio di errore l’altezza dell’immagine è inferiore a minHeight.

maxRatioMessage

tipo: stringa predefinito: The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}

Il messaggio di errore se il rapporto d’aspetto eccede maxRatio.

minRatioMessage

tipo: stringa predefinito: The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}

Il messaggio di errore se il rapporto d’aspetto è inferiore a minRatio.

allowSquareMessage

tipo: stringa predefinito: The image is square ({{ width }}x{{ height }}px). Square images are not allowed

Il messaggio di errore se l’immagine è quadrata e allowSquare è false.

allowLandscapeMessage

tipo: stringa predefinito: The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed

Il messaggio di errore se l’immagine ha orientamento panorama e allowLandscape è false.

allowPortraitMessage

tipo: stringa predefinito: The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed

Il messaggio di errore se l’immagine ha orientamento ritratto e allowPortrait è false.