Framework: Codeigniter 3
Contents
Framework: Codeigniter 3#

Documentación básica para trabajar con Codeigniter 3
Índice
Configuraciones#
Creación del proyecto#
Descargar Codeigniter 3:
https://www.codeigniter.com/download
Probar que está funcionando en la misma raiz desde consola:
php -S localhost:8000
Atención
Este manual es para la versión 3, la versión 4 tiene cambios en su estructura entre otros.
Atención
La versión 3 de Codeigniter funciona mínimo bajo la versión de PHP 5.6 mientras que la 4 como mínimo la 7.1
Estructura de Codeigniter 3#
En la estructura de un proyecto Codeigniter 3 estas son las partes más importantes:
- application: directorio donde se encuentra la aplicación. Dentro de ella se encuentran las siguientes carpetas:
config: carpeta de configuración con diversos archivos los cuales se destacan config.php, constants.php, database.php y routes.php.
controllers: carpeta donde se irán añadiendo los controladores del proyecto.
models: carpeta donde se crearán los modelos de datos (en el caso de codeigniter 3 serán queries).
views: carpeta donde se crearán las vistas del proyecto.
index.php: archivo principal del proyecto, es desde donde se ejecuta la aplicación en el servidor.
Rutas en Codeigniter 3#
Las rutas en codeigniter se irán creando automáticamente a medida que vayamos añadiendo controladores y métodos siguiendo esta estructura:
Vistas en CodeIgniter 3#
Para crear una vista en Codeigniter 3 vamos a application/views y creamos un archivo por ejemplo consolas_list.php:
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <meta http-equiv="X-UA-Compatible" content="IE=edge">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 <title>Listado de consolas</title>
8</head>
9<body>
10 <h1>Listado de consolas</h1>
11
12 <ul>
13 <li>Sony PlayStation</li>
14 <li>Sega Megadrive</li>
15 <li>Nintendo DS</li>
16 </ul>
17</body>
18</html>
Para cargar la vista en el controlador hacemos lo siguiente en Consolas.php:
1<?php
2defined('BASEPATH') OR exit('No direct script access allowed');
3
4class Consolas extends CI_Controller{
5 public function index(){
6 // cargar vista html:
7 $this->load->view('consolas_list');
8 }
9}
10
11/* Fin del archivo Consolas.php */
Uso de variables#
Las variables se pueden cargar desde el controlador del siguiente modo (Consolas.php):
1<?php
2defined('BASEPATH') OR exit('No direct script access allowed');
3
4class Consolas extends CI_Controller{
5 public function index(){
6 // creamos una variable data con la información de una consola:
7 $data['consola'] = 'Sony Playstation';
8 // se la pasamos a la vista:
9 $this->load->view('consolas_list', $data);
10 }
11}
12
13/* Fin del archivo Consolas.php */
En la vista la mostramos del siguiente modo (consolas_list.php):
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <meta http-equiv="X-UA-Compatible" content="IE=edge">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 <title>Listado de consolas</title>
8</head>
9<body>
10 <h1>Listado de consolas</h1>
11 <!-- El contenido de la variable data se pasa como si fueran variables sueltas: -->
12 <p><?php echo $consola ?></p>
13</body>
14</html>
Controladores en CodeIgntier 3#
Para crear un controlador accedemos a la carpeta application y dentro a la carpeta controllers, ahí creamos un controlador al que llamamos por ejemplo Consolas.php:
1<?php
2// copiamos este código de welcome.php para evitar accesos no autorizados:
3defined('BASEPATH') OR exit('No direct script access allowed');
4// creamos la clase que estiende de CI_Controller:
5class Consolas extends CI_Controller{
6 // creamos la función para controlar la primera vista index:
7 public function index(){
8 echo "Página de consolas";
9 }
10}
11
12// en lugar de cerrar el código php comentamos el final del archivo:
13/* Fin del archivo Consolas.php */
Las ruta se genera automáticamente en base al nombre del controlador, para la vista principal tendríamos la ruta: http://localhost:8000/index.php/consolas/
Para cada vista individual tenemos por ejemplo en este caso: http://localhost:8000/index.php/consolas/index
Importante
Asegúrate siempre de que el nombre del archivo y la clase sean exactamente el mismo o las rutas podrían no funcionar.
Manejar parámetros en el controlador#
Para añadir parámetros al controlador basta con pasarle los parámetros al método que se vaya a ejecutar:
1<?php
2defined('BASEPATH') OR exit('No direct script access allowed');
3
4class Consolas extends CI_Controller{
5
6 // parámetros get por el método:
7 public function index($consola = null){
8 echo $consola;
9 }
10}
11
12/* Fin del archivo Consolas.php */
Ojo! ahora como estamos recibiendo parametros en el index debemos indicar el método que se esta utilizando en la ruta, de este modo: http://localhost:8000/consolas/index/Switch
Redirección a otra ruta#
Para cargar el redireccionador lo recomendado es importar en el constructor el helper url:
1<?php
2defined('BASEPATH') OR exit('No direct script access allowed');
3
4class Consolas extends CI_Controller{
5 // cargar el constructor:
6 function __construct(){
7 parent::__construct();
8 // se carga el helper url:
9 $this->load->helper('url');
10 }
11
12 public function index($consola = null){
13 echo "Estás en el índice";
14 }
15
16 // creamos un método que nos redirija al indice:
17 public function redirigir(){
18 // ejecutamos la función redirect y le decimos a que metodo tiene que viajar:
19 redirect('/consolas/index/', 'refresh');
20 }
21}
22
23/* Fin del archivo Consolas.php */
Si ejecutamos localhost:8000/consolas/redirigir nos llevará al index de consolas via redireccionamiento.
Nota
Si queremos viajar al index de un controlador basta con escribir el nombre del mismo: ``redirect(“consolas”)``que en el caso expuesto sería lo mas adecuado.
Formularios#
Crear un formulario con Codeigniter 3#
Desde el controlador llamar al helper form (consolas.php):
1class Consolas extends CI_Controller{
2
3 function __construct(){
4 parent::__construct();
5 $this->load->model('Consolas_model');
6
7 // utilizamos el helper form:
8 $this->load->helper('form');
9 }
10 public function index(){
11
12 $consolas_list = $this->Consolas_model->get_all();
13
14 if(empty($consolas_list)){
15 $data['consolas_list'] = "No existen consolas";
16 }
17
18 $data['consolas_list'] = $consolas_list;
19
20 $this->load->view('consolas_list', $data);
21 }
22
23 // crear un controlador para el create:
24 public function add(){
25 // recibir información por POST:
26 if($this->input->post()){
27 $data['new_console'] = $this->input->post();
28 }else{
29 $data['new_console'] = "pendiente de resultados";
30 }
31 // cargamos la vista:
32 $this->load->view('add_consola', $data);
33
34 }
35}
en una nueva vista a la que llamamos add_consola.php le cargamos el formulario:
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <meta http-equiv="X-UA-Compatible" content="IE=edge">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 <title>Añadir consola</title>
8</head>
9<body>
10<h1>Añadir consola</h1>
11<hr/>
12<br/>
13
14<!-- creamos una variable para construir la estructura de cada campo: -->
15<?php
16 $input_marca = array(
17 'name' => 'marca',
18 'id' => 'marca',
19 'class' => 'input_marca'
20 );
21 $input_modelo = array(
22 'name' => 'modelo',
23 'id' => 'modelo',
24 'class' => 'input_modelo'
25 );
26 // en caso de ser un desplegable tendremos dos arrays:
27 $input_en_coleccion = array(
28 'name' => 'en_coleccion',
29 'id' => 'en_coleccion',
30 'class' => 'input_en_coleccion'
31 );
32 $en_coleccion = array(
33 '0' => 'No',
34 '1' => 'Si'
35 );
36?>
37
38<!-- Al construir el formulario con el helper el action se construye a partir de la ruta del controlador -->
39<?php
40 echo form_open('');
41
42 echo form_label('Marca', 'marca');
43 echo form_input($input_marca);
44 echo "<br/><br/>";
45 echo form_label('Modelo', 'modelo');
46 echo form_input($input_modelo);
47 echo "<br/><br/>";
48 echo form_label('En posesión', 'en_posesion');
49 echo form_dropdown($input_en_coleccion,$en_coleccion);
50 echo "<br/><br/>";
51 echo form_submit('btn_consola', 'añadir consola');
52 echo form_close();
53?>
54
55<hr />
56<!-- aquí mostramos el resultado: -->
57<pre><?php echo var_dump($new_console); ?></pre>
58</body>
59</html>
Ahora tenemos el formulario para añadir consolas en http://localhost:8000/consolas/add
Nota
Si estamos usando un puerto de salida distinto al 80 deberemos modificar el parámetro base_url en la ruta config/config.php, modificamos el valor del array
con un valor por ejemplo: $config['base_url'] = 'http://localhost:8000';
Bases de datos#
Crear base de datos#
Instala MariaDB si estas usando linux o busca y servidor Wamp o xamp que soporte Mysql 5, con la versión de Mysql 8 tendrás problemas.
Ejecutamos en el terminal sudo mysql y creamos una base de datos llamada curso_codeigniter:
CREATE DATABASE curso_codeigniter;
Creamos un nuevo usuario:
1CREATE USER 'guillermo'@'localhost' IDENTIFIED BY '1234';
Le otorgamos privilegios en la base de datos nueva:
1GRANT ALL PRIVILEGES ON curso_codeigniter.* TO 'guillermo'@'localhost';
Desplegar los privilegios para que se puedan usar ya:
1FLUSH PRIVILEGES;
Seleccionamos la base de datos:
1USE curso_codeigniter;
creamos la tabla consolas:
1CREATE TABLE consolas (
2 id INT auto_increment NOT NULL,
3 marca varchar(100) NULL,
4 modelo varchar(100) NULL,
5 PRIMARY KEY(id)
6)
7ENGINE=InnoDB;
Creamos unos registros para tener datos que listar a continuación:
1INSERT INTO consolas VALUES
2 (NULL, "sony", "playstation"),
3 (NULL, "nintendo", "switch"),
4 (NULL, "sega", "mega drive"),
5 (NULL, "microsoft", "xbox");
Con esto ya tenemos todo lo necesario para trabajar.
Conectar a la base de datos#
En el proyecto nos vamos a application/config/database.php y al final editamos el array $db[“default”]:
1$db['default'] = array(
2 'dsn' => '',
3 'hostname' => 'localhost', // localhost el servidor
4 'username' => 'guillermo', // este es el usuario para conectar
5 'password' => '1234', // la contraseña en blanco si no definimos una
6 'database' => 'curso_codeigniter', // el nombre de la base de datos
7 'dbdriver' => 'mysqli',
8 'dbprefix' => '',
9 'pconnect' => FALSE,
10 'db_debug' => (ENVIRONMENT !== 'production'),
11 'cache_on' => FALSE,
12 'cachedir' => '',
13 'char_set' => 'utf8',
14 'dbcollat' => 'utf8_general_ci',
15 'swap_pre' => '',
16 'encrypt' => FALSE,
17 'compress' => FALSE,
18 'stricton' => FALSE,
19 'failover' => array(),
20 'save_queries' => TRUE
21);
Crear modelo de datos y READ#
Para crear un modelo de datos nos vamos a application/models y creamos un archivo por ejemplo Consolas_model.php:
1<?php
2// creamos una clase para el modelo:
3class Consolas_model extends CI_Model {
4 // preparamos el constructor:
5 function __construct(){
6 parent::__construct();
7 // cargamos la base de datos:
8 $this->load->database();
9 }
10
11 // creamos una función para traer del modelo todos los registros:
12 public function get_all(){
13 // recuperar datos de la tabla:
14 $query = $this->db->get('consolas');
15 // devolvemos la información:
16 return $query->result();
17 }
18}
19
20/* Fin del archivo Consolas_model.php */
En el controlador realizamos la consulta Consolas.php:
1<?php
2defined('BASEPATH') OR exit('No direct script access allowed');
3
4class Consolas extends CI_Controller{
5
6 function __construct(){
7 parent::__construct();
8 // cargamos el modelo en el constructor:
9 $this->load->model('Consolas_model');
10 }
11
12 public function index(){
13
14 // utilizamos el método para recuperar los datos del la tabla:
15 $consolas_list = $this->Consolas_model->get_all();
16
17 // comprobamos si está vacío:
18 if(empty($consolas_list)){
19 // pasamos al data que no existen consolas:
20 $data['consolas_list'] = "No existen consolas";
21 }
22
23 // asignamos a la data la lista:
24 $data['consolas_list'] = $consolas_list;
25
26 // se la pasamos a la vista:
27 $this->load->view('consolas_list', $data);
28 }
29}
30
31/* Fin del archivo Consolas.php */
Por úlitmo en el template lo mostramos consolas_list.php:
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <meta http-equiv="X-UA-Compatible" content="IE=edge">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 <title>Listado de consolas</title>
8</head>
9<body>
10 <h1>Listado de consolas</h1>
11 <!-- El contenido de la variable data se pasa como si fueran variables sueltas: -->
12 <ul>
13 <?php foreach($consolas_list as $key => $consola){
14 echo "<li>" . $consola->marca . " " . $consola->modelo . "</li>";
15 }
16 ?>
17 </ul>
18</body>
19</html>
Ahora si vamos a la ruta http://localhost:8000/consolas veremos la lista creada en la base de datos.
Atención
Es posible que tengamos que habilitar la extensión mysqli.dll quitando el ; de la línea correspondiente en el archivo php.ini
Insertar datos#
En el modelo añadimos una nueva función en Consolas_model.php:
1<?php
2
3class Consolas_model extends CI_Model {
4
5 function __construct(){
6 parent::__construct();
7 $this->load->database();
8 }
9
10 public function get_all(){
11 $query = $this->db->get('consolas');
12 return $query->result();
13 }
14 // creamos una función para insertar datos:
15 public function create(){
16 // recuperamos los datos recibidos por post:
17 $data = $this->input->post();
18 // quitamos el botón submit que se reconoce como un input mas y da error (tambien quitamos el campo en_coleccion que tampoco existe en la tabla):
19 unset($data['btn_consola']);
20 unset($data['en_coleccion']);
21 // insertamos los datos recibidos por post pasandole a insert la tabla y la operación post:
22 $this->db->insert('consolas', $data);
23
24 // retornamos el resultado:
25 return $this->db->insert_id();
26 }
27}
28
29/* Fin del archivo Consolas_model.php */
A continuación editamos el controlador Consolas.php:
1<?php
2defined('BASEPATH') OR exit('No direct script access allowed');
3
4class Consolas extends CI_Controller{
5 function __construct(){
6 parent::__construct();
7 $this->load->model('Consolas_model');
8 $this->load->helper('form');
9 }
10
11 public function index(){
12
13 $consolas_list = $this->Consolas_model->get_all();
14
15 if(empty($consolas_list)){
16 $data['consolas_list'] = "No existen consolas";
17 }
18
19 $data['consolas_list'] = $consolas_list;
20
21 $this->load->view('consolas_list', $data);
22 }
23
24 public function add(){
25
26 if($this->input->post()){
27 // si llegan valores por post vamos a insertarlos:
28 $id_result = $this->Consolas_model->create();
29 // para hacer pruebas le pasamos a new_console el id resultante:
30 $data['new_console'] = $id_result;
31 }else{
32 $data['new_console'] = "pendiente de resultados";
33 }
34
35
36 $this->load->view('add_consola', $data);
37
38 }
39}
40
41/* Fin del archivo Consolas.php */
Y ya solo falta nuestro formulario que lo hemos podido crear en la sección Formularios.
Borrar registros#
Creamos una nueva función en el modelo Consolas_model.php:
1<?php
2
3class Consolas_model extends CI_Model {
4
5 function __construct(){
6 parent::__construct();
7 $this->load->database();
8 }
9
10 public function get_all(){
11 $query = $this->db->get('consolas');
12 return $query->result();
13 }
14
15 public function create(){
16 $data = $this->input->post();
17
18 unset($data['btn_consola']);
19 unset($data['en_coleccion']);
20
21 $this->db->insert('consolas', $data);
22
23 return $this->db->insert_id();
24 }
25
26 // para eliminar creamos una nueva función delete que recibirá un id:
27 public function delete($id){
28 if($id){
29 // buscamos el id del elemento a eliminar en la tabla:
30 $this->db->where('id', $id);
31 // decimos que se debe borrar de la tabla correspondiente:
32 $this->db->delete('consolas');
33 }
34 }
35}
36
37/* Fin del archivo Consolas_model.php */
Ahora pasamos al controlador Consolas.php:
1<?php
2defined('BASEPATH') OR exit('No direct script access allowed');
3
4class Consolas extends CI_Controller{
5 function __construct(){
6 parent::__construct();
7 $this->load->model('Consolas_model');
8 $this->load->helper('form');
9 // cargamos el helper url para poder hacer redirecciones:
10 $this->load->helper('url');
11 }
12
13 public function index(){
14
15 $consolas_list = $this->Consolas_model->get_all();
16
17 if(empty($consolas_list)){
18 $data['consolas_list'] = "No existen consolas";
19 }
20
21 $data['consolas_list'] = $consolas_list;
22
23 $this->load->view('consolas_list', $data);
24 }
25
26 public function add(){
27
28 if($this->input->post()){
29 $id_result = $this->Consolas_model->create();
30 $data['new_console'] = $id_result;
31 }else{
32 $data['new_console'] = "pendiente de resultados";
33 }
34
35
36 $this->load->view('add_consola', $data);
37 }
38
39 // creamos una nueva función para eliminar un contacto:
40 public function delete($id = null){
41 // comprobamos que recibimos un id:
42 if($id){
43 // realizamos la eliminación del elemento:
44 $this->Consolas_model->delete($id);
45 }
46
47 // redirigimos a la lista:
48 redirect('consolas');
49 }
50}
51
52/* Fin del archivo Consolas.php */
Si vamos a la ruta siguiente y vamos cambiando el numero id se borraran los registros que tengan dicho id: localhost:8000/index.php/consolas/delete/1
Actualizar registros#
Como en los otros casos comenzamos con el modelo que estabamos usando Consolas_model.php:
1<?php
2
3class Consolas_model extends CI_Model {
4
5 function __construct(){
6 parent::__construct();
7 $this->load->database();
8 }
9
10 public function get_all(){
11 $query = $this->db->get('consolas');
12 return $query->result();
13 }
14
15 public function create(){
16 $data = $this->input->post();
17
18 unset($data['btn_consola']);
19 unset($data['en_coleccion']);
20
21 $this->db->insert('consolas', $data);
22
23 return $this->db->insert_id();
24 }
25
26 public function delete($id){
27 if($id){
28 $this->db->where('id', $id);
29 $this->db->delete('consolas');
30 }
31 }
32
33 // creamos una metodo para traer una consola:
34 public function get($id){
35 if($id){
36 $query = $this->db->where('id', $id);
37 $query = $this->db->get('consolas');
38
39 // retornamos el resultado:
40 return $query->result();
41 }
42 }
43
44 // creamos un método para actualizar un registro:
45 public function update($id){
46 // recuperamos los datos de post y quitamos el botón:
47 $update_data = $this->input->post();
48 unset($update_data['btn_consola']);
49
50 // buscamos el registro que queremos modificar:
51 $this->db->where('id', $id);
52 // registramos los cambios:
53 $this->db->update('consolas', $update_data);
54
55 }
56}
57
58/* Fin del archivo Consolas_model.php */
Continuamos por el controlador Consolas.php:
1<?php
2defined('BASEPATH') OR exit('No direct script access allowed');
3
4class Consolas extends CI_Controller{
5 function __construct(){
6 parent::__construct();
7 $this->load->model('Consolas_model');
8 $this->load->helper('form');
9 // recuerda tener el helper de redirecciones cargado:
10 $this->load->helper('url');
11 }
12
13 public function index(){
14
15 $consolas_list = $this->Consolas_model->get_all();
16
17 if(empty($consolas_list)){
18 $data['consolas_list'] = "No existen consolas";
19 }
20
21 $data['consolas_list'] = $consolas_list;
22
23 $this->load->view('consolas_list', $data);
24 }
25
26 public function add(){
27
28 if($this->input->post()){
29 $id_result = $this->Consolas_model->create();
30 $data['new_console'] = $id_result;
31 }else{
32 $data['new_console'] = "pendiente de resultados";
33 }
34
35
36 $this->load->view('add_consola', $data);
37 }
38
39 public function delete($id = null){
40 if($id){
41 $this->Consolas_model->delete($id);
42 }
43
44 redirect('consolas');
45 }
46
47 // crear un nuevo metodo para actualizar registros:
48 public function update($id = null){
49 // vamos a redireccionar si no nos llega un id:
50 if($id == null){
51 redirect('consolas');
52 }else{
53 // si nos llega algo cargamos los datos haciendo una consulta:
54 $data['consola'] = $this->Consolas_model->get($id);
55 // si no recuperamos nada (no existe el registro) regresamos a la lista:
56 if(empty($data['consola'])){
57 redirect('consolas');
58 }
59 }
60
61 // verificamos si recibimos valores vía post:
62 if($this->input->post()){
63 $this->Consolas_model->update($id);
64 redirect('consolas');
65 }
66
67 // cargamos la vista para actualizar consolas:
68 $this->load->view('update_consola', $data);
69 }
70}
71
72/* Fin del archivo Consolas.php */
Finalmente creamos una vista similar a la que tenemos para crear registros y la llamamos update_consola.php:
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <meta http-equiv="X-UA-Compatible" content="IE=edge">
6 <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 <title>Actualizar consola</title>
8</head>
9<body>
10<h1>Actualizar consola</h1>
11<hr/>
12<br/>
13
14<!-- pasamos el resultado del data por el atributo value: -->
15<?php
16 $input_marca = array(
17 'name' => 'marca',
18 'id' => 'marca',
19 'class' => 'input_marca',
20 'value' => set_value('marca', $consola[0]->marca) // para establecer un valor en el formulario se usa set_value()
21 );
22 $input_modelo = array(
23 'name' => 'modelo',
24 'id' => 'modelo',
25 'class' => 'input_modelo',
26 'value' => set_value('modelo', $consola[0]->modelo)
27 );
28 $en_coleccion = array(
29 '0' => 'No',
30 '1' => 'Si'
31 );
32?>
33
34<!-- Hemos quitado el selector porque no lo vamos a usar -->
35<?php
36 echo form_open('');
37
38 echo form_label('Marca', 'marca');
39 echo form_input($input_marca);
40 echo "<br/><br/>";
41 echo form_label('Modelo', 'modelo');
42 echo form_input($input_modelo);
43 echo "<br/><br/>";
44 echo form_submit('btn_consola', 'actualizar consola');
45 echo form_close();
46?>
47
48<hr />
49</body>
50</html>
Si vamos por ejemplo a la ruta: http://localhost:8000/index.php/consolas/update/2 podremos actualizar el registro si existe. Si dicho registro no existe establecimos que hiciera un redireccionamiento a la lista.