Tipo de campo file

El tipo file representa una entrada de archivo en tu formulario.

Rendered as input file field
Inherited options
Parent type form
Class Symfony\Component\Form\Extension\Core\Type\FileType

Uso básico

Digamos que tienes esta definición de formulario:

$builder->add('attachment', 'file');

Prudencia

No olvides añadir el atributo enctype en la etiqueta del formulario: <form action="#" method="post" {{ form_enctype(form) }}>.

Cuando se envía el formulario, el campo de datos adjuntos (attchment) será una instancia de Symfony\Component\HttpFoundation\File\UploadedFile. Este lo puedes utilizar para mover el archivo adjunto a una ubicación permanente:

use Symfony\Component\HttpFoundation\File\UploadedFile;

public function uploadAction()
{
    // ...

    if ($form->isValid()) {
        $someNewFilename = ...

        $form['attachment']->getData()->move($dir, $someNewFilename);

        // ...
    }

    // ...
}

El método move() toma un directorio y un nombre de archivo como argumentos. Puedes calcular el nombre de archivo en una de las siguientes formas:

// usa el nombre de archivo original
$file->move($dir, $file->getClientOriginalName());

// calcula un nombre aleatorio e intenta deducir la extensión (más seguro)
$extension = $file->guessExtension();
if (!$extension) {
    // no se puede deducir la extensión
    $extension = 'bin';
}
$file->move($dir, rand(1, 99999).'.'.$extension);

Usar el nombre original a través de getClientOriginalName() no es seguro, ya que el usuario final lo podría haber manipulado. Además, puede contener caracteres que no están permitidos en nombres de archivo. Antes de usar el nombre directamente, lo debes desinfectar.

Lee en el recetario el ejemplo de cómo manejar la carga de archivos adjuntos con una entidad Doctrine.

Opciones heredadas

Estas opciones las hereda del tipo field:

required

tipo: Boolean predeterminado: true

Si es true, reproducirá un atributo required de HTML5. La label correspondiente será reproducida con una clase required.

Esto es superficial e independiente de la validación. A lo sumo, si dejas que Symfony deduzca el tipo de campo, entonces el valor de esta opción, se puede inferir a partir de tu información de validación.

label

tipo: string predefinido: La etiqueta se «deduce» a partir del nombre del campo

Establece la etiqueta que se utilizará al reproducir el campo. La etiqueta también se puede fijar directamente dentro de la plantilla:

{{ form_label(form.name, 'Tu nombre') }}

read_only

Nuevo en la versión 2.1: The read_only option was changed in 2.1 to render as a readonly HTML attribute. Previously, it rendered as a disabled attribute. Use the disabled option if you need the old behavior.

tipo: Boolean predeterminado: false

If this option is true, the field will be rendered with the readonly attribute so that the field is not editable.

disabled

Nuevo en la versión 2.1: The disabled option is new in version 2.1

type: boolean default: false

Si no deseas que un usuario pueda modificar el valor de un campo, puedes establecer la opción disabled en true. Cualquier valor recibido será omitido.

error_bubbling

tipo: Boolean predeterminado: false

Si es true, los errores de este campo serán pasados al campo padre o al formulario. Por ejemplo, si estableces en true un campo normal, cualquier error de ese campo se adjuntará al formulario principal, no al campo específico.

Bifúrcame en GitHub