Poner una validación personalizada para el NIF:
'nif' => array(
'notBlank' => array(
'rule' => array('notBlank'),
'message' => 'El nif no puede estar en blanco',
),
'alfa' => array(
'rule' => array('custom', '/^(X(-|\.)?0?\d{7}(-|\.)?[A-Z]|[A-Z](-|\.)?\d{7}(-|\.)?[0-9A-Z]|\d{8}(-|\.)?[A-Z])$/i'),
'message' => 'Debe ser un nif válido',
),
)
Los productos no se borran, sólo pasan a ser inactivos. En el delete no borramos el producto, solo pasamos el campo activo a 0:
public function delete($id = null) {
$this->Producto->id = $id;
if (!$this->Producto->exists()) {
throw new NotFoundException(__('Invalid producto'));
}
$this->request->allowMethod('post', 'delete');
if ($this->Producto->saveField('activo', 0)) {
$this->Flash->success(__('The producto has been deleted.'));
} else {
$this->Flash->error(__('The producto could not be deleted. Please, try again.'));
}
return $this->redirect(array('action' => 'index'));
}
En el beforefind del modelo productos ponemos como condición que activo sea 1:
public function beforeFind($query) {
$query['conditions']['activo'] = 1;
return $query;
}
En la base de datos ponemos como valor por defecto de activo ‘1’ y eliminamos de cualquier vista la referencia al campo activo.
En la acción upload del controlador Productos compruebo que lo que me suben es una imagen:
$archivo = $this->request->data['Producto']['archivo'];
if (explode('/', $archivo['type'])[0] == 'image') {
move_uploaded_file($archivo['tmp_name'], WWW_ROOT . 'img' . DS . $this->request->data['Producto']['referencia'] . DS . $archivo['name']);
$this->Flash->success(__('Archivo subido.'));
} else {
$this->Flash->error(__('Solo se permiten imágenes.'));
}
Para ver las imágenes que hemos subido dentro de la vista de producto. En el controlador pasamos las imágenes encontradas:
public function view($id = null) {
if (!$this->Producto->exists($id)) {
throw new NotFoundException(__('Invalid producto'));
}
$options = array('conditions' => array('Producto.' . $this->Producto->primaryKey => $id));
$producto = $this->Producto->find('first', $options);
$this->set('producto', $producto);
$dir = new Folder(WWW_ROOT . "img/" . $producto['Producto']['referencia']."/");
$this->set('files', $dir->find(".*"));
}
En la vista (view.ctp) añadimos las líneas que nos mostrarán las imágenes:
<?php
foreach ($files as $file):
$this->Html->image($producto['Producto']['referencia']."/".$file);
endforeach;
?>