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);
...

results matching ""

    No results matching ""