Inicio > CodeIgniter, Gestor de noticias > Gestor de noticias (Segunda parte): Controladores

Gestor de noticias (Segunda parte): Controladores

Viernes, 11 de Abril de 2008

Recapitulando, habíamos creado nuestra plantilla y luego la habíamos divido en una cabecera y un pie de página.

En este capitulo crearemos nuestro primer controlador, veremos algún ejemplo de funcionamiento con el típico “Hola Mundo!” y algunos otros detalles.

Para empezar explicaré cómo funciona todo esto de los controladores. Como expliqué en la “primera parte”, los controladores son los que coordinan las vistas, el “código” y los modelos. La arquitectura de un controlador es una clase, dónde cada función responderá según nuestra URL, me explico:

http://www.tu-web.com/(index.php)/controlador/función/[variables]

Es decir, en nuestro links definiremos que controlador cargar, que función dentro de este controlador ejecutaremos y si necesitamos, pasar variables (todas las que queramos).

Nota: index.php lo puse entre paréntesis porque por defecto necesitaremos llamarlo así, pero luego queda mucho mas bonito quitarlo, por lo que deberíamos usar ModRewrite, pero en eso ya entraremos más adelante.

Veamos un ejemplo:

http://www.tu-web.com/index.php/noticias/leer/8

Aquí estaríamos llamando a nuestro controlador de noticias, que tendrá dentro una función llamada leer y que le pasaremos como variable ($_GET) el entero 8.

Es bastante sencillo ¿no?

Ahora pasemos al código. Los controladores en CodeIgniter se sitúan en la carpeta “controllers” (como todo, irá dentro de la carpeta system/application/..), y estos tendrán el mismo nombre que pasamos por URL. Es decir para cargar el ejemplo de antes, el archivo se llamara noticias.php.

Luego, el esquema básico de los controladores es:

class Nombre_del_controlador extends Controller{
function Nombre_del_controlador(){
parent::Controller();
}
function funcion(){
//...
}
}

Siguiendo el ejemplo de antes crearemos un controlador llamado “noticias.php“, con una función “leer” y que recoja la variable “8″:

class Noticias extends Controller{
function Noticias(){
parent::Controller();
}
function leer(){
$numero = $this->uri->segment(3);
echo "Hola Mundo numero ".$numero;
}
}

[Resultado]

Aquí introducimos un nuevo concepto. CodeIgniter tiene un montón de librerías y “helpers” (ayudantes), una vez cargados, podemos acceder a ellos con:

$this->(nombre_de_la_libreria)->(funcion)

La función “uri->segment(int)” nos devolverá el parámetro de nuestra URL, parecido al $_GET. Es decir, con el ejemplo, “$this->uri->segment(1)” nos devuelve “noticias” y “$this->uri->segment(2)” nos devuelve “leer”.

Y esto es todo para este taller de hoy. Poco a poco vamos avanzando, para el siguiente empezaremos a crear nuestra base de datos y aprenderemos a configurarla, para posteriormente poder usar las librerías correctamente.

Lagarto CodeIgniter, Gestor de noticias , , , , , , , , , ,

  1. rj
    Jueves, 17 de Julio de 2008 a las 16:28 | #1

    Enhorabuena por tus explicaciones.

    Un apunte. Creo que hay un error. Donde dices:

    ”$this->uri->segment(4)” nos devuelve “leer”

    debería ser:

    “$this->uri->segment(2)” nos devuelve “leer”

    Gracias

  2. Jueves, 17 de Julio de 2008 a las 16:31 | #2

    Es totalmente cierto, se me paso ese detalle. Gracias! Ahora mismo lo modifico.

  3. Max
    Sábado, 1 de Noviembre de 2008 a las 23:51 | #3

    no me funciona
    me aparece lo sgte:

    Fatal error: Call to undefined function: base_url() in C:\mowes_portable\www\gn\system\application\views\cabecera.php on line 6

    he configurado una y otra vez todo y nada…
    gn es mi carpeta codeigniter y hic los correspondientes cambios en config.php

    me pueden ayudar
    thx!

  4. Max
    Domingo, 2 de Noviembre de 2008 a las 00:00 | #4

    sorry mi comentario anterior corresponde a la tercera parte

    es esta linea especificamente: “<base href=”" />” de la cabecera

    lo arreglo asi: “”

    pro me sale otro error:

    Fatal error: Call to a member function on a non-object in C:\mowes_portable\www\gn\system\application\controllers\noticias.php on line 14

    ke corresponde a :”Gestor de noticias” de la cabecera, no se ke hacer
    :S

    gracias por tu tiempo y ayuda

  5. Lunes, 3 de Noviembre de 2008 a las 19:05 | #5

    quizá te olvidaste de cargar las librerías de URL, en el autoload.

  1. Sábado, 26 de Abril de 2008 a las 21:49 | #1