Valida que un valor es un «archivo» legítimo, el cual puede ser uno de los siguientes:
Esta restricción se usa comúnmente en formularios con el tipo de formulario file (archivo).
Truco
Si el archivo que estás validando es una imagen, prueba la restricción Image.
Aplica a | propiedad o método |
Opciones | |
Clase | Symfony\Component\Validator\Constraints\File |
Validador | Symfony\Component\Validator\Constraints\FileValidator |
Esta restricción se utiliza comúnmente en una propiedad que se debe pintar en un formulario con tipo de formulario archivo. Por ejemplo, supongamos que estás creando un formulario de autor donde puedes cargar una «biografía» PDF para el autor. En tu formulario, la propiedad archivoBio sería de tipo file. La clase Autor podría ser la siguiente:
// 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;
}
}
Para garantizar que el objeto bioFile es un File válido, y que está por debajo de un determinado tamaño de archivo y es un archivo PDF válido, añade lo siguiente:
# 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
// src/Acme/BlogBundle/Entity/Author.php
namespace Acme\BlogBundle\Entity;
use Symfony\Component\Validator\Constraints as Assert;
class Autor
{
/**
* @Assert\File(
* maxSize = "1024k",
* mimeTypes = {"application/pdf", "application/x-pdf"},
* mimeTypesMessage = "Please upload a valid PDF"
* )
*/
protected $bioFile;
}
<!-- src/Acme/BlogBundle/Resources/config/validation.xml -->
<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>
// src/Acme/BlogBundle/Entity/Author.php
namespace Acme\BlogBundle\Entity;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints as Assert;
class Autor
{
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 propiedad bioFile es validada para garantizar que se trata de un archivo real. Su tamaño y tipo MIME también son validados por las correspondientes opciones especificadas.
tipo: mixed
Si se establece, el tamaño del archivo subyacente debe estar por debajo de ese tamaño de archivo para ser válido. El tamaño del archivo se puede dar en uno de los siguientes formatos:
tipo: array o string
Si lo estableces, el validador comprobará que el tipo mime del archivo subyacente sea igual al tipo mime proporcionado (en el caso de una cadena) o existe en la colección de determinados tipos mime (en el caso de un arreglo).
Puedes encontrar una lista de tipos mime existentes en el sitio web de IANA
tipo: string predefinido: The file is too large ({{ size }}). Allowed maximum size is {{ limit }} (El archivo es demasiado grande. El tamaño máximo permitido es {{ limit }})
El mensaje mostrado si el archivo es mayor que la opción maxSize.
tipo: string predefinido: The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }} (El tipo mime del archivo ({{ type }}) no es válido. Los tipos mime permitidos son {{ types }})
El mensaje mostrado si el tipo mime del archivo no es un tipo mime válido para la opción mimeTypes.
tipo: string predefinido: The file could not be found (No se pudo encontrar el archivo)
El mensaje aparece si no se puede encontrar algún archivo en la ruta especificada. Este error sólo es probable si el valor subyacente es una cadena de ruta, puesto que un objeto File no se puede construir con una ruta de archivo no válida.
tipo: string predefinido: The file is not readable (No se puede leer el archivo)
El mensaje aparece si el archivo existe, pero la función is_readable de PHP falla cuando se le pasa la ruta del archivo.
tipo: string predefinido: The file is too large. Allowed maximum size is {{ limit }} (El archivo es demasiado grande. El tamaño máximo permitido es {{ limit }})
El mensaje que se muestra si el archivo subido es mayor que la configuración de upload_max_filesize en php.ini.
tipo: string predefinido: The file is too large (El archivo es demasiado grande)
El mensaje que se muestra si el archivo subido es mayor que el permitido por el campo HTML para la entrada de archivos.
tipo: string predefinido: The file could not be uploaded (No se puede subir el archivo)
El mensaje que se muestra si el archivo cargado no se puede subir por alguna razón desconocida, tal como cuando la subida del archivo ha fallado o no se puede escribir en el disco.