Controladores
Los controladores en CodeIgniter son el núcleo de todo, es decir, es donde se concentrará todo nuestro trabajo y todo el código a implementar. Son clases PHP que heredan de la clase padre **CI_Controller** (clase base de **CodeIgniter**) El nombre de la clase debe tener la primera letra en mayúsculas (Libros) y el fichero PHP donde se va a crear el controlador debe llamarse igual que la misma pero todo en minúsculas. Los controladores se deben de guardar en el directorio **application/controllers/**
Para definir las acciones que va a implementar un controlador, usaremos métodos públicos de la propia clase disponibles desde la URL, por ejemplo **index()**, **ver()**,**update()**. Un detalle importante del mapeo de la ruta URL es que si no establecemos una acción en la llamada a un controlador, CodeIgniter ejecutará la acción **index()** por defecto del controlador invocado. Por ejemplo, la url **http://localhost/proyecto/index.php/libros/** buscará por defecto en el controlador **libros** el método **index()**, por lo que es recomendable implementarlo aunque luego realicemos alguna redirección a otra acción.
**El segundo segmento de la URI determina qué función del controlador se llama.** El formato que usa CodeIgniter para llamar a las acciones (métodos) de una clase controlador es el siguiente: http://localhost/proyecto/[controlador]/[método]/[argumentos]
Los segmentos [controlador], [método] y [argumentos] aparecen entre corchetes porque no son obligatorios, ya que, en CodeIgniter podemos configurar un controlador por defecto ($route['default_controller'] = "welcome"), siempre hay un método que se invoca por defecto: index (si está implementado claro) y los argumentos pueden aparecer o no.Ejemplo:
http://localhost/proyecto/libros/ver/2
Accede al controlador de libros,acción ver y pasa el parámetro 2 que puede ser el identificador del libro en la base de datos.
Si queremos realizar alguna tarea en concreto cuando se crea la clase, por ejemplo, cargar alguna librería o inicialización de variables, podemos implementar el constructor en formato PHP5 con **__construct**. Si implementamos el constructor, primero debemos invocar al constructor del padre porque al reemplazarlo deben de establecerse algunos valores y parámetros de configuración.
Puede que necesitemos métodos privados que realicen algún tipo de cálculo o procesamiento. Podemos usar los modificadores de acceso "**private**" o "**protected**" delante de la definición (recomendado) o podemos declarar el método anteponiendo un "_" como prefijo. Estos métodos no podrán ser accesibles desde la URL, si los invocamos provocará un error fatal. Un ejemplo de métodos privados podrían ser las funciones **calcular_items()** (devuelve el número de items de la cesta) o **calcular_precio()** (devuelve el total acumulado de los items que hay en la cesta) de un posible controlador **Cesta**.
Para no tener métodos con demasiado código, se recomienda el uso de métodos privados que estructuran mucho mejor el código y lo hacen más legible y mantenible (ideal para posibles refactorizaciones)
Aquí vemos un ejemplo del controlador **Libros** que se almacenará en el directorio **application/controllers/libros.php**
<?php
class Libros extends CI_Controller {
public function index() {
//Cargamos el modelo de libros.
//A partir de ahora podemos usar Libros_model como un
//atributo más de nuestra clase Libros
$this->load->model('Libros_model');
//Inicializamos una array donde iremos introduciendo variables
$variables = array();
//titulo de la vista
$variables [ 'titulo' ] = "LIBRERIA UAZON – Pagina principal";
//mensaje específico para la plantilla
$variables [ 'cabecera' ] = "Ultimas novedades";
//obtenemos de la base de datos todos los libros para la portada
$variables [ 'librosPortada' ] =
$this->Libros_model->getLibrosPortada();
//Pasamos los datos obtenidos en el controlador a la vista
$this->load->view('libros/listar', $variables);
}
}
?>
Como hemos comentado anteriormente, en el controlador se cargan los modelos y posteriormente podemos usarlos como atributo propio del controlador.
Aquí vemos la parte en la que se carga el modelo **Libros_model** y posteriormente invocamos al método **getLibrosPortada()** de dicho modelo.
...
$this->load->model('Libros_model');
...
$variables [ 'librosPortada' ] = $this->Libros_model->getLibrosPortada();
$this->load->view ( 'libros/listar', $variables);
...