Al fin pude descifrar una manera de subir imágenes en CakePHP 2.0. Probé este
plugin de Jose Gonzalez y me funcionó adecuadamente. Puedo subir imágenes que se guardan en una estructura de carpetas fácilmente consultable por el identificador del modelo que se guarda en la base de datos. A parte genera los thumbnails en los tamaños que uno le defina.
Estos fueron los pasos que seguí:
1. Bajar el plugin.Se puede descargar el zip o bajar el código del repositorio de GitHub.
2. Se copia el código en la carpeta
/app/Plugin/Upload (dejar la carpeta renombrada con Upload u otro nombre más amigable).
3. Se edita el "bootstrap.php" (
/app/Config/) agregando la línea para habilitar el plugin:
CakePlugin::load('Upload');
4. En la base de datos, en la tabla donde se guarda la referencia a la foto, agregamos dos columnas: una para el identificador de la foto, y otra para el identificador del directorio:
CREATE TABLE `mi_db`.`anuncios` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`titulo` varchar(45) NOT NULL,
`id_foto` varchar(15) DEFAULT NULL,
`dir` varchar(250) DEFAULT NULL,
)
5. En el modelo se configura las opciones para la subida de la imagen:
class Anuncio extends AppModel {
public $actsAs = array(
'Upload.Upload' => array(
'id_foto' => array(
'fields' => array(
'dir' => 'dir'
),
'thumbnailSizes' => array(
'big' = '200x200',
'small' =>'120x120',
'thumb' =>'80x80'
),
'thumbnailMethod'=> 'php'
)
)
);
}
Observese que se configura los nombre de las columnas que configuramos en la tabla de nuestra base de datos, los tamaños de los thumbnails, y el método para crear los thumbnails (aquí uso php pues es una extensión que viene ya instalado por defecto en la mayoría de los ambientes de desarrollo tipo WAMP).
6. Agrego el código de la vista:
<?php
echo $this->Form->create('Anuncio', array('type' => 'file'));
echo $this->Form->input('id_foto', array('type' => 'file', 'label' => 'Foto'));
echo $this->Form->input('dir', array('type' => 'hidden'));
echo $this->Form->end('Guardar Anuncio');
?>
7. ¡Listo! Las imágenes son guardadas dentro de 'webroot/files' (la ruta se puede configurar).