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; ?>