En el artículo anterior de esta serie dimos los primeros pasos en el patrón modelo-vista-controlador. Creamos los primeros modelos para nuestra aplicación web Biblioteca y sus correspondientes controladores y vistas. Igualmente, dividimos nuestras vistas en varias partes para aprovechar la modularidad de la misma. Sin embargo, la aplicación, por el momento, no era nada funcional. Tan solo podíamos ver el contenido de las tablas Paises y Editoriales.

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.


Más información:

La imagen de la portada es CC0 Creative Commons.

El resto de imágenes son capturas de pantalla realizadas por el autor del artículo.

0 0 votos
Article Rating
Subscribe
Notificarme de
guest

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

5 Comments
más antiguo
más nuevo más votado
Reacciones en línea
Ver todos los comentarios
Isaac Palacio

Una pregunta, ¿desde que archivo se enlazan los js y css?