Tutorial CodeIgniter 2º parte: Clases Modelo y eliminar index.php de las URL

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

Continuamos con nuestra guía sobre los conceptos básicos de CodeIgniter, en esta entrada, comprenderemos el funcionamiento de los Modelos y finalizaremos el ejemplo que habíamos comenzado en la anterior entrega.


code-igniter

Preparando la base de datos y configurando CodeIgniter

En el anterior post vimos cómo se llamaba a los Controladores, y cómo se podía enviar datos a las Vistas para poder mostrarlos al usuario, pero para finalizar el ejercicio que nos habíamos planteado, es necesario obtener la información de la base de datos.

En primer lugar, necesitamos crear la estructura de la base de datos e introducir algunos registros, para ello usaremos este script SQL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE DATABASE IF NOT EXISTS `adwe` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `adwe`;

CREATE TABLE IF NOT EXISTS `empleados` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(50) NOT NULL,
  `sueldo` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

INSERT INTO `empleados` (`id`, `nombre`, `sueldo`) VALUES
(1, 'Juan', 1000),
(2, 'Javier', 800),
(3, 'Jaime', 1250),
(4, 'Jorge', 1100);

A continuación, debemos configurar CodeIgniter para que pueda conectarse a la base de datos, para ello nos iremos a la carpeta “config” dentro de “application”, y abriremos el fichero “database.php” y nos fijaremos en estas líneas:

1
2
3
4
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['database'] = '';

Debemos modificar estos valores con los necesarios para conectar a nuestra base de datos, si no hemos hecho ninguna modificación a la configuración que trae por defecto MySQL, el usuario es ‘root’ y la contraseña está vacía (algo que se debe evitar en un entorno de producción por traer problemas de seguridad). Por último, el parámetro ‘database’ debe ser ‘adwe’.

Creando nuestra primera clase Modelo

Ya tenemos todo listo para conectarnos a la base de datos, así que es hora de trabajar en nuestro primer Modelo. Crearemos un fichero llamado ‘Empleados_model.php’ dentro de la carpeta ‘Models’, y escribiremos lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
class Empleados_model extends CI_Model{

    function __construct(){
        $this->load->database();
    }
   
    function obtener_empleados(){
        $query = $this->db->get('empleados');
       
        return $query->result_array();
    }
}
?>

En la función ‘__construct’ cargamos la base de datos, así podemos acceder a ella usando $this->db, como hacemos en la función ‘obtener_empleados’. Para poder recuperar todos las entradas de la tabla ‘empleados’, ejecutamos la función ‘get()’, que recibe como parámetro la tabla de la que queremos los registros, así que esta llamada se traduciría como: SELECT * FROM ‘empleados’. La función ‘get()’ está disponible gracias a la clase Active Record de CodeIgniter, aquí podéis ver todas las opciones que nos brinda.

Modificando el Controlador y la Vista

Con esto tenemos un enlace con la base de datos, lo siguiente será modificar el controlador para que maneje estos datos, para ello volvemos al fichero ‘empleados.php’ en ‘controllers’ y realizaremos las siguiente modificaciones en la función ‘mostrar_pagina_principal’:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function mostrar_pagina_principal(){
    $this->load->model('empleados_model');
    $listadoEmpleados = $this->empleados_model->obtener_empleados();
       
    $listadoEmpleadosSueldo = array();
    foreach($listadoEmpleados as $empleado){
        $itemEmpleado = array();
        $itemEmpleado['nombre'] = $empleado['nombre'];
        $itemEmpleado['sueldoAnual'] = $empleado['sueldo']*12;
        $listadoEmpleadosSueldo[] = $itemEmpleado;
    }

    $data = array(
        'empleados' => $listadoEmpleadosSueldo
    );     
    $this->load->view('pagina_principal', $data);
}

En primer lugar, cargamos el modelo que hemos creado en la primera línea, usando la función ‘load->model’ y pasándole el nombre del modelo, a continuación llamamos a la función que habíamos creado y obtenemos un array con la información de la base de datos. Después, recorremos el array calculando el sueldo anual de cada empleado, y copiando este dato además del nombre a un nuevo array, que será el que enviemos a la Vista en el array ‘$data’.

Finalmente, preparamos la vista para que muestre la información de manera ordenada:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<html>
<body>
    <h1>
        Primer tutorial de CI en ADWE
    </h1>
    <table>
        <tr>
            <th>Nombre</th>
            <th>Sueldo Anual</th>
        </tr>
        <?php foreach($empleados as $item): ?>
            <tr>
                <td> <?php echo $item['nombre']; ?></td>
                <td> <?php echo $item['sueldoAnual']; ?> </td>
            </tr>
        <?php endforeach; ?>
    </table>
</body>
</html>

Si todo ha ido bien, debemos ser capaces de ver una página como la siguiente:
2Tutorial CI

Eliminar index.php de las URL

Para finalizar esta entrada, veremos cómo se puede eliminar ‘index.php’ de la URL de nuestra web, para ello, necesitaremos crear un fichero .htaccess y colocarlo en la raíz de nuestra web (junto a ‘index.php’). En este fichero escribiremos esto:

1
2
3
4
5
6
<IfModule  mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
</IfModule>

Este fichero hace lo siguiente: primero comprueba si Apache dispone del módulo ‘mod_rewrite’, si es así, lo inicia en la línea 2, a continuación establece dos condiciones, si la ruta solicitada no hace referencia a ningún archivo o carpeta del servidor, entonces se ejecuta la penúltima línea del fichero, donde se reescribe la dirección y se le añade ‘index.php’ al inicio. Para que esto funcione es necesario poner la opción ‘index_page’ del fichero de configuración ‘config.php’ en blanco, y asegurarnos de que Apache disponga del módulo ‘mod_rewrite’.

Eso es todo por hoy, en la próxima entrega estudiaremos el ayudante para formularios de CodeIgniter, e insertaremos datos en la base de datos.

Desarrollador web y aficionado al desarrollo de videojuegos.

Comentarios arrow 7 Comentarios
  1. Me resolvió una duda importante. Gracias.

  2. Hola, muy buenos los tutoriales sobre CodeIgniter, no conocía este framework y me parece muy interesante. Pero una cosa que no me funciono de este tutorial. Lo de eliminar el index.php de la url. He creado eso que pedía y le puse lo que pedía y al quitar de la url lo de index.php me da error y me dice que falta algo. No se si lo he entendido bien pero creo que era eso de quitarlo así

    aquí con index.php:

    http://localhost/CursoPHP/ADWE/CodeIgniter/index.php/empleados/mostrar_pagina_principal

    Y aquí sin:

    http://localhost/CodeIgniter/empleados/mostrar_pagina_principal

    No se si te referías a eso. Utilizo XAMPP para más información. Tampoco sé si XAMPP se puede hacer eso.

    Un saludo.

  3. yo no he podido eliminar el index.php en mi codeigniter, estoy usando ubuntu, y no sale, a fuerzas le tengo que colocar el index.php, aun teniendo configurado como tu pusiste en este post, espero y me ayudes….gracias

Escribe un comentario

Tu e-mail no será publicado. Los campos marcados con un asterisco son obligatorios.