jueves, 17 de septiembre de 2009

Sobrecargando el campo upload

Repasemos un momento.

En PHP, cuando tienes uno o varios campos tipo "file" para subir archivos en un formulario y éste es enviado al pulsarse un botón Submit, PHP coloca los datos de los archivos subidos en el array $FILES. No tenemos más que ir a buscar allí los datos, hacer las comprobaciones necesarias y usar move_uploaded_file() para poner los archivos en los lugares adecuados.

CakePHP va un paso más allá y coloca esos datos en los campos adecuados del array de datos que viene del formulario, lo que hace aún más fácil usarlos. En concreto, el array asociativo que nos da la información de cada archivo tiene estas claves:

tmp_name
name
type
size
error

Y ahora, el truco:

Supongamos que tenemos un Modelo con un campo file con el que vamos a subir un archivo. Por tanto, en la vista en la que construimos el formulario ponemos algo así como:


echo $form->input('Modelo.file', array('type' => 'file'));


Resulta que si ponemos un campo del estilo de:


echo $form->input('Modelo.file.extra');


Cuando hagamos el proceso del archivo subido nos vamos a encontrar más claves en el array de información, exactamente tantas como campos Modelo.file.* hayamos creado:

extra

tmp_name
name
type
size
error


¿Útil? Puede que sí. Gracias a este pequeño truco he podido crear un formulario en el que el usuario puede marcar que sea borrado un archivo ya existente, si no quiere subir otro para que lo sustituya.

No hay comentarios: