1. CodeIgniter: hola mundo

Primera entrada de una serie dedicada a CodeIgniter, un framework para trabajar en PHP siguiendo un patrón MVC.

basquiat

archivado en: PHP/AJAX / 26 mayo, 2013 / taller:

Con esta entrada comienzo una serie sobre CodeIgniter, que es un framework muy fácil de aprender a manejar que nos permite trabajar en PHP siguiendo el patrón Modelo - Vista - Controlador (MVC).  Apenas retocados para darles algo de forma literaria, son mis apuntes personales sobre el tema, por lo que algunos pasajes pueden resultar un tanto espesos.

Para seguir esta serie es necesario manejarse con soltura con PHP y tener cierto conocimiento de PHP orientado a objetos. Además, es recomendable ir probando las cosas en algún servidor. Si no tenemos ninguno a mano, podemos instalar XAMPP, que se tarda cinco minutos. Por último, para no perder el tiempo creando una base de datos, se puede utilizar la base world de Oracle.

Primeros pasos

Claro está, lo primero que debemos hacer es descargarnos la última versión del framework, que en el momento de escribir estas líneas es la versión 2.1.3. Descomprimimos y guardamos los archivos que hay en la carpeta Codeigniter en la raíz del sitio que estará gestionado por el framework.

Hay tres grandes directorios:

  1. user_guide, que no debemos subir al server y que contiene la guía de CI.
  2. system, donde está el core de la aplicación y que no deberíamos necesitar tocar nunca.
  3. application, en la que tendremos todos nuestros archivos.

En esencia, el mecanismo del patrón MVC consiste en un tipo de páginas (los controladores) que gestionan las páginas que ven los usuarios (las vistas) y las llamadas a la base de datos (los modelos). Por ejemplo, imaginemos una web de una agencia de viajes realizada con este patrón, en la que un usuario realiza una compra. El proceso sería este:

  1. El usuario accede a la web y el controlador envía la vista "portada".
  2. Realiza una compra, es decir, rellena un formulario cuyos datos son enviados al controlador "recoge-formulario".
  3. El controlador "recoge-formulario" envía los datos al modelo que se encarga de realizar la query a la base de datos y los devuelve al controlador.
  4. Con los datos que le ha enviado el modelo, el controlador envía al usuario una nueva vista.

Esto queda claro con un primer ejemplo en el que, en un alarde de originalidad, vamos a preparar una página que diga Hola Mundo.

Hola Mundo

En application/controller creamos el controlador de la vista que verá el cliente. Podemos llamarla c_holamundo.php y el código es este:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class C_holamundo extends CI_Controller {

public function muestra_vista()

{

$this->load->view('v_holamundo');

}

}

/* End of file c_holamundo.php */

/* Location: ./application/controllers/c_holamundo.php */

Como vemos, no es más que una clase extendida de la clase CI_Controller, a la cual hay que llamar de la misma manera que el archivo, pero con la primera letra en mayúscula.

La clase tiene de momento un solo método (función), que es el encargado de cargar esa vista mediante load->view(). Vamos a crear ahora la vista y luego vemos cómo utilizar este método desde la url.

Así, en el directorio views creamos v_holamundo.php:

<!DOCTYPE html>

<html lang="es">

<head>

<meta charset="utf-8">

<title>Hola Mundo</title>

</head>

<body>

<div id="wrap">

<h1>Hola Mundo</h1>

</div>

</body>

</html>

Ahora podemos acceder a esa vista escribiendo en la url del navegador el path que lleva al método que la carga:

url_server/vista/método/parámetros

En mi caso, que estoy desarrollando el tutorial en localhost, algo así:

http://localhost/tcodeigniter/index.php/c_holamundo/muestra_vista

CodeIgniter permite otras maneras de acceder a los controladores que mostrarán las vistas, pero de momento solo nos interesa ver cómo podemos ahorrarnos la necesidad de tener que escribir también el index.php en la URL. Para eso, hay que hacer dos cosas:

1. En el archivo application/config.php, que es donde se define parte de la configuración principal del proyecto buscamos esta línea:

$config['index_page'] = 'index.php';

y dejamos el valor en blanco:

$config['index_page'] = '';

Luego, en el directorio raíz del sitio, en mi caso, http://localhost/tcodeigniter/, preparamos este archivo .htaccess:

RewriteEngine on

RewriteCond $1 !^(index\.php|images|robots\.txt)

RewriteRule ^(.*)$ /index.php/$1 [L]

Si esas reglas no funcionan, estas sí que deberían hacerlo:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .* index.php/$0 [PT,L]

Ahora ya podemos acceder directamente a la clase/método del controlador:

http://localhost/tcodeigniter/c_holamundo/muestra_vista

Bueno, pues con estoy voy terminando esta entrada en la que hemos creado una primera vista y su respectivo controlador. En la próxima empezamos con las bases de datos.

|| Tags: , , ,

valoración de los lectores sobre 1. CodeIgniter: hola mundo

  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración positiva
  • estrellica valoración negativa
  • estrellica valoración negativa
  • 3.3 sobre 5 (3 votos)

¿Te ha parecido útil o interesante esta entrada?
dormido, valoración 1 nadapensativo, valoración 2 un poco sonrisa, valoración 3 a medias guiño, valoración 4 bastante aplauso, valoración 5 mucho

Tú opinión es muy importante, gracias por compartirla!

4 respuestas a “1. CodeIgniter: hola mundo

  1. Hola eh seguido los pasos que ah dicho usted pero cuando le doy
    localhost/index.php/c_holamundo
    localhost/c_holamundo
    me tira un error 404
    subastacelular.com/c_holamundo
    error 404
    subastacelular.com/index.php/c_holamundo
    error 404
    bueno estoy trabajando con otros post y tambien me dio ese problema saludos de posadas, misiones

  2. marcos el dijo:

    Hola Yuma, parece que te falta la vista, aunque tendría que ver todo el código para ver qué está fallando…

    Saludos!

  3. Hola Marcos.

    Jugando con el .htaccess

    Si en la última línea cambias:
    RewriteRule ^(.*)$ /index.php/$1 [L]

    por:
    RewriteRule ^(.*)$ index.php/$1 [L]

    es decir, quitas la barra delante del index.php/$1 [L]

    funciona. La segunda regla funciona también, pero así, a mi me funcionan las 2.

    Saludos y gracias. A ver si sacas tiempo y sigues blogeando codeignitadas.