En este artículo vamos a hacer que el modelo-vista-controlador correspondiente a Editoriales sea completamente funcional. Es decir, vamos a dotarlo de las funciones básicas CRUD, crear, leer, actualizar y borrar.
Crear, leer, actualizar y borrar en nuestra Biblioteca
Para que nuestra aplicación tenga alguna utilidad es necesario que, además de ver los datos que contiene, podamos editarlos, modificarlos y, en su caso, borrarlos. En el artículo anterior tan solo éramos capaces de visualizar los datos de nuestra tabla Editoriales. Vamos a modificar los diferentes elementos modelo-vista-controlador, para conseguir que nuestra aplicación tenga estas funcionalidades.
Modelo
El primer paso es modificar el modelo, las diferentes funcionalides. Esto lo haremos modificando el archivo
application/models/Editoriales_model.php
Lo primero es incluir la opción de añadir nuevos elementos. El código necesario para ese método es el siguiente:
public function add() { $data = array( 'nombre' => $this->input->post('nombre'), ); return $this->db->insert('editoriales', $data); }
En este método tenemos que destacar la forma de conseguir el valor del nombre
. Esto se hace a través de
$this->input->post('nombre')
que nos permite rescatar los valores, que hemos pasado del formulario con un método POST.
Por otro lado, para eliminar un determinado registro de nuestra tabla utilizaremos la columna id
y el código correspondiente a la misma, que es el siguiente:
public function delete($id) { $this->db->delete('editoriales', array('id' => $id)); }
Y por último, para modificar un registro necesitamos, además de indicarle el índice id
, los valores que queremos modificar. Así, el método para actualizar registros es este:
function update($id, $nombre) { $this->db->where('id', $id); $this->db->set('nombre', $nombre); return $this->db->update('editoriales'); }
El controlador
Una vez ya hemos modificado el modelo, el siguiente paso será modificar el controlador. A este controlador le añadiremos, en principio, los métodos equivalentes al modelo.
El primero es el que nos permitirá añadir nuevas editoriales.
public function add() { $data['main_title'] = 'Biblioteca'; $data['title2'] = 'Editoriales'; $this->load->helper('form'); $this->load->library('form_validation'); $this->form_validation->set_rules('nombre', 'Nombre', 'required'); if ($this->form_validation->run() === FALSE) { $this->load->view('templates/header', $data); $this->load->view('editoriales/add'); $this->load->view('templates/footer'); } else { $this->editoriales_model->add(); $this->load->view('templates/header', $data); $this->load->view('editoriales/success'); $this->load->view('templates/footer'); } }
Aquí hemos introducido dos elementos adicionales:
$this->load->helper('form');
que nos permitirá el uso de formularios y
$this->load->library('form_validation');
que nos permite validar su contenido.
El primer paso es indicar las reglas de validación que, en nuestro caso y en principio, solo va a ser que nombre
no puede ser nula. Esto se hace mediante:
$this->form_validation->set_rules('nombre', 'Nombre', 'required');
Una vez establecidas las reglas de validación lo siguiente es comprobar si los valores introducidos son correctos. Si la validación da un resultado incorrecto volveremos a solicitar al usuario que introduzca los valores. O, en caso contrario, en caso de que sea correcta, mostraremos una ventana notificando que los valores introducidos son correctos.
Para borrar un determinado elemento necesitamos identificarlo. Para hacerlo, como veremos en el apartado de las vistas, pasaremos en la propia url el id del elemento a borrar:
public function delete() { $id = $this->input->get('id'); $resultado = $this->editoriales_model->get_editorial_by_id($id); if(count($resultado) > 0) { $this->editoriales_model->delete($id); $this->index(); } }
Para obtener el id
del elemento a borrar utilizamos
$id = $this->input->get('id');
A continuación comprobamos que ese elemento existe, buscando todos los elementos que tienen ese id
y, si todo ha ido correctamente, lo borramos.
Una vez borrado, volvemos a generar la vista donde aparecen todas las editoriales
$this->index();
Para editar una editorial, utilizaremos el método edit()
, que vemos a continuación:
public function edit() { $this->load->helper('form'); $data['main_title'] = 'Biblioteca'; $data['title2'] = 'Editoriales'; // Obtenemos el id de la editorial a editar $id = $this->input->get('id'); $resultado = $this->editoriales_model->get_editorial_by_id($id); $nombre = $this->input->post('nombre'); $data['nombre'] = $nombre; if($nombre == NULL) { if(count($resultado) > 0) { $data['editorial'] = $resultado[0]; $this->load->view('templates/header', $data); $this->load->view('editoriales/edit', $data); $this->load->view('templates/footer'); } else { $data['mensaje'] = 'No existe esa editorial'; $this->load->view('templates/header', $data); $this->load->view('templates/error', $data); $this->load->view('templates/footer'); } } else { $this->load->library('form_validation'); $this->form_validation->set_rules('nombre', 'Nombre', 'required'); if ($this->form_validation->run() === FALSE) { $this->load->view('templates/header', $data); $this->load->view('editoriales/edit'); $this->load->view('templates/footer'); } else { $id = $this->input->post('id'); $this->editoriales_model->update($id, $nombre); $this->index(); } } }
El método edit
se encargará de buscar el elemento que tenemos que editar, generar la vista para que introduzcamos los datos a editar y, en el caso de que todo haya ido correctamente, actualizar nuestra base de datos.
El primer paso, correspondiente a la búsqueda del elemento a editar, se obtiene mediante un método GET
$id = $this->input->get('id');
Además miramos si también existe nombre obtenido por el método POST
. De esta manera, si ya lo hemos editado, el valor $nombre
tendrá un valor no nulo,mientras que, si estamos en el primer paso del procedimiento, no tendrá ningún valor.
Si estamos en el primer paso de nuestro procedimiento buscaremos todos los valores que coincidan con nuestro id
mediante:
$resultado = $this->editoriales_model->get_editorial_by_id($id);
En el caso de que exista el id
nos mostrará la vista:
editoriales/edit
y en caso contrario:
/templates/error
Ahora bien, si existe $nombre
quiere decir que ya hemos introducido los datos para modificar el elemento. En ese caso, procedemos a validar los datos introducidos, al igual que hicimos en el caso del método add
. Si la validación es incorrecta, volvemos a solicitar que introduzca los datos editoriales/edit
. Mientras que, si los valores introducidos son correctos, actualizamos la base de datos:
$this->editoriales_model->update($id, $nombre)
y mostramos todas las editoriales:
$this->index();
Las vistas
Una vez ya tenemos, más o menos, claros el modelo y el controlador, es el momento de casarlo todo con las vistas. Lo primero la vista
views/editoriales/list.php
que he modificado ligeramente respecto del artículo anterior para enlazarla con las funciones de editar y borrar. Para conseguirlo, he añadido las siguientes cuatro líneas:
<td> <a href="<?php echo base_url();?>editoriales/edit?id=<?php echo $editorial['id'];?>" class="button">Editar<a/> <a href="<?php echo base_url();?>editoriales/delete?id=<?php echo $editorial['id'];?>" class="button">Eliminar<a/> </td>
Lo que he hecho ha sido añadir una nueva columna con dos acciones, una para editar y otra para eliminar el elemento. Si te fijas, en la propia url del enlace he pasado el id
del elemento a editar o eliminar.
De esta manera, mediante un método GET pasamos la información al controlador, indicando lo que queremos hacer, editar o borrar, y el elemento sobre el que tiene que trabajar.
Por un lado la acción de borrar no tiene vista asociada, puesto que el controlador nos dirige de nuevo al método index
. Por otro lado, el método editar nos mostrará en primera instancia un formulario para modificar el nombre de nuestra editorial, tal y como puedes ver en la siguiente captura de pantalla:
Si te fijas en la url
indicamos el método del controlador con el que debe trabajar e identificamos la editorial /editoriales/edit?id=7
.
Para añadir una nueva editorial también utilizamos una vista, pero enlazada desde el menú general. En este formulario solo debemos añadir el nombre de la editorial:
<?php echo validation_errors(); ?> <?php echo form_open('editoriales/add'); ?> <label for="nombre">Nombre</label> <input type="input" name="nombre" /><br /> <input type="submit" name="submit" value="Añade una nueva editorial" /> <?php echo form_close();?>
Si recuerdas, el nombre
se lo pasamos al método add
de la vista mediante un método POST:
$this->input->post('nombre')
.
Las rutas
Al igual que hicimos en el artículo anterior, nos queda indicar todas las rutas para que todo funcione correctamente. Así, editamos de nuevo el archivo config/routes.php
, añadiendo las siguientes líneas:
$route['editoriales/list'] = 'editoriales/index'; $route['editoriales/delete'] = 'editoriales/delete'; $route['editoriales/new'] = 'editoriales/new'; $route['editoriales/edit'] = 'editoriales/edit'; $route['editoriales/update'] = 'editoriales/update';
Conclusión
Con esto ya hemos visto todos los procedimientos necesarios para trabajar con nuestra base de datos. Ya podemos crear, leer, modificar y borrar los diferentes elementos, aunque, por ahora, solo de la tabla Editoriales.
Sin embargo, si te fijas, cualquiera puede entrar directamente en cualquier página, no existe ningún control. En el siguiente artículo veremos cómo controlar el acceso.
Por último, os recuerdo que todo el código para la biblioteca está disponible en el repositorio de GitLab.
Te esperamos en los próximos artículos en donde hablaremos mas acerca de estos temas que hoy en día son de importancia e interés en el mundo de la tecnología.