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:
- user_guide, que no debemos subir al server y que contiene la guía de CI.
- system, donde está el core de la aplicación y que no deberíamos necesitar tocar nunca.
- 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:
- El usuario accede a la web y el controlador envía la vista "portada".
- Realiza una compra, es decir, rellena un formulario cuyos datos son enviados al controlador "recoge-formulario".
- 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.
- 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.
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
Hola Yuma, parece que te falta la vista, aunque tendría que ver todo el código para ver qué está fallando…
Saludos!
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.
GRACIAS GRACK