Crear y ejecutar un proyecto CodeIgniter
¿Qué es CodeIgniter?
CodeIgniter es un framework de desarrollo web en PHP, ligero y de alto rendimiento. Basado en el patrón de diseño Modelo-Vista-Controlador (MVC), está diseñado para ayudar a los desarrolladores a construir aplicaciones web robustas de manera rápida. CodeIgniter destaca por su estructura sencilla, rendimiento excelente y facilidad de aprendizaje, lo que lo convierte en la opción preferida para muchos programadores PHP.
Principales características y ventajas de CodeIgniter
- Núcleo liviano: El sistema de núcleo de CodeIgniter es muy compacto, contiene solo los componentes esenciales para ejecutar el framework, lo que permite una carga extremadamente rápida.
- Rendimiento sobresaliente: Su arquitectura eficiente puede manejar altas tasas de concurrencia, proporcionando una experiencia y desempeño destacado en las aplicaciones.
- Fácil de aprender: Cuenta con documentación clara y una API intuitiva, facilitando la curva de aprendizaje para desarrolladores nuevos y experimentados.
- Alta flexibilidad: Permite elegir e integrar libremente bibliotecas de terceros según las necesidades del proyecto, facilitando la personalización y expansión de funcionalidades.
- Comunidad activa: Dispone de una gran y activa comunidad de desarrolladores, que ofrece abundantes recursos y soporte.
CodeIgniter es ideal para una amplia variedad de proyectos, desde aplicaciones pequeñas hasta soluciones empresariales, y ayuda a los desarrolladores a crear aplicaciones web de calidad de manera eficiente.
Configurar el entorno de desarrollo CodeIgniter usando ServBay
ServBay es una herramienta de entorno local de desarrollo web creada para macOS y Windows. Integra PHP, bases de datos (MySQL, PostgreSQL, MongoDB), sistemas de caché (Redis, Memcached), servidores web (Caddy, Nginx, Apache), entre otros paquetes, y brinda una interfaz de gestión sencilla. Usando ServBay, puedes instalar y administrar fácilmente el entorno necesario para CodeIgniter.
Este tutorial te guía para crear, configurar y ejecutar un proyecto CodeIgniter con el entorno PHP y la función Sitios Web de ServBay, e ilustra la integración con diferentes bases de datos y servicios de caché.
Requisitos previos
Antes de empezar, asegúrate de lo siguiente:
- ServBay está instalado y funcionando correctamente en tu sistema macOS o Windows.
- En ServBay se ha habilitado la versión de PHP que deseas utilizar (por ejemplo, PHP 8.3).
- En ServBay has activado los paquetes de base de datos y caché que necesitas (por ejemplo, MySQL, PostgreSQL, Redis, Memcached).
Crear un proyecto CodeIgniter
ServBay recomienda unificar la ubicación de tus proyectos web en los siguientes directorios, para facilitar una mejor administración:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Instalar Composer
ServBay ya incluye Composer por defecto, por lo que no necesitas instalarlo manualmente. Solo tienes que ejecutar el comando
composer
en la terminal.Ingresar al directorio raíz del sitio
Abre la terminal y navega al directorio sugerido:
macOS:
bashcd /Applications/ServBay/www
1Windows:
cmdcd C:\ServBay\www
1Crear el proyecto CodeIgniter
Usando Composer, crea un nuevo proyecto CodeIgniter 4. Llamaremos al directorio del proyecto
servbay-codeigniter-app
:bashcomposer create-project codeigniter4/appstarter servbay-codeigniter-app
1Composer descargará la estructura base y las dependencias de CodeIgniter en el directorio indicado.
Entrar en el directorio del proyecto
Accede al directorio del proyecto recién creado:
macOS:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Windows:
cmdcd C:\ServBay\www\servbay-codeigniter-app
1
Configuración inicial
Configurar conexión a base de datos
La configuración de la base de datos de CodeIgniter se encuentra en el archivo app/Config/Database.php
. Antes de utilizar una base de datos, debes definir aquí tus datos de acceso.
Primero, si usarás una base de datos, asegúrate de crear una llamada servbay_codeigniter_app
utilizando la herramienta de gestión de bases de datos de ServBay (como Adminer o phpMyAdmin, accesibles desde la interfaz de ServBay).
Luego, edita el archivo app/Config/Database.php
, ubica el arreglo $default
y ajusta los datos de conexión en función del sistema (MySQL o PostgreSQL) activado en ServBay. El usuario y contraseña predeterminados en ServBay suelen ser root
y password
.
Ejemplo de configuración para MySQL:
php
public $default = [
'DSN' => '',
'hostname' => '127.0.0.1', // ServBay suele escuchar en 127.0.0.1
'username' => 'root', // Usuario por defecto
'password' => 'password', // Contraseña por defecto
'database' => 'servbay_codeigniter_app', // Nombre de tu base de datos
'DBDriver' => 'MySQLi', // Puede ser MySQLi o Pdo, según el sistema
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306, // Puerto predeterminado MySQL
];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Si usas PostgreSQL, el valor de DBDriver
debe ser 'Postgre'
, el port
comúnmente es 5432
y tal vez necesites ajustar los valores de charset según el sistema.
Configuración de la caché (Memcached/Redis)
Si usarás Memcached o Redis como sistema de caché, debes editar el archivo app/Config/Cache.php
.
Edita app/Config/Cache.php
y busca la sección relevante. El puerto por defecto de Memcached en ServBay es 11211
, y para Redis es 6379
. Generalmente no se requiere contraseña.
Ejemplo de configuración para Memcached:
php
public $memcached = [
'host' => '127.0.0.1', // Memcached suele escuchar en 127.0.0.1
'port' => 11211, // Puerto predeterminado
'weight' => 1,
];
1
2
3
4
5
2
3
4
5
Ejemplo de configuración para Redis:
php
public string $handler = 'redis'; // Define el manejador de cache como redis
public $default = [ // Configuración de Redis en el arreglo default
'host' => '127.0.0.1', // Redis en 127.0.0.1
'password' => null, // Sin contraseña por defecto
'port' => 6379, // Puerto predeterminado
'timeout' => 0,
'database' => 0,
];
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Asegúrate de ajustar cada sección según los paquetes de caché que hayas activado.
Configuración del servidor web (Sitios en ServBay)
Usa la función Sitios Web de ServBay para configurar el servidor y apuntar al directorio correcto de tu proyecto CodeIgniter.
- Abre la interfaz de ServBay.
- Dirígete a la pestaña Sitios Web.
- Haz clic en el botón
+
en la esquina inferior izquierda para añadir un nuevo sitio. - Introduce la información:
- Nombre: Especifica uno fácil de identificar, como
Mi Primer Sitio CodeIgniter
. - Dominio: Elige el dominio local que utilizarás, por ejemplo,
servbay-codeigniter-test.local
. ServBay gestionará automáticamente la resolución.local
. - Tipo de sitio: Elige
PHP
. - Versión de PHP: Selecciona la versión que desees (por ejemplo,
8.3
). - Directorio raíz: Es fundamental que este apunte a la carpeta
public
dentro de tu proyecto (/Applications/ServBay/www/servbay-codeigniter-app/public
).
- Nombre: Especifica uno fácil de identificar, como
- Haz clic en Agregar para guardar.
- Si ServBay te pide aplicar cambios, confirma.
Para pasos detallados, consulta Agregar el primer sitio web.
Agregar código de ejemplo
Para verificar la operación del proyecto y probar la conexión a la base de datos y caché, modifica el controlador Home
por defecto en CodeIgniter y agrega métodos de ejemplo.
Edita el archivo app/Controllers/Home.php
y reemplaza su contenido por el siguiente:
php
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
use CodeIgniter\Database\Exceptions\DatabaseException; // Importa excepciones de base de datos
use CodeIgniter\Cache\Exceptions\CacheException; // Importa excepciones de caché
class Home extends Controller
{
/**
* Método de página de inicio
*/
public function index(): string
{
// Devuelve un mensaje de bienvenida sencillo
return '<h1>¡Hola ServBay y CodeIgniter!</h1><p>Tu proyecto CodeIgniter está funcionando en ServBay.</p>';
}
/**
* Ejemplo Memcached
*/
public function memcached(): string
{
try {
$cache = \Config\Services::cache();
// Intentar guardar en caché
$success = $cache->save('servbay_memcached_key', '¡Hola Memcached desde CodeIgniter!', 60); // Caché de 60 segundos
if (!$success) {
return 'Error: No se pudo guardar datos en Memcached. Verifica el servicio y la configuración de Memcached.';
}
// Intentar leer desde caché
$value = $cache->get('servbay_memcached_key');
if ($value === null) {
return 'Error: No se pudo obtener datos de Memcached. Puede que la caché haya expirado o el servicio esté caído.';
}
return 'Prueba Memcached exitosa: ' . $value;
} catch (CacheException $e) {
// Captura excepciones de caché
return 'Error de caché: ' . $e->getMessage() . '. Verifica que el servicio Memcached esté funcionando y bien configurado.';
} catch (\Exception $e) {
// Captura otras excepciones
return 'Ocurrió un error inesperado: ' . $e->getMessage();
}
}
/**
* Ejemplo Redis
*/
public function redis(): string
{
try {
$cache = \Config\Services::cache();
// Intentar guardar en caché
$success = $cache->save('servbay_redis_key', '¡Hola Redis desde CodeIgniter!', 60); // Caché de 60 segundos
if (!$success) {
return 'Error: No se pudo guardar datos en Redis. Verifica el servicio y la configuración de Redis.';
}
// Intentar leer desde caché
$value = $cache->get('servbay_redis_key');
if ($value === null) {
return 'Error: No se pudo obtener datos de Redis. Puede que la caché haya expirado o el servicio esté caído.';
}
return 'Prueba Redis exitosa: ' . $value;
} catch (CacheException $e) {
// Captura excepciones de caché
return 'Error de caché: ' . $e->getMessage() . '. Verifica que el servicio Redis esté funcionando y bien configurado.';
} catch (\Exception $e) {
// Captura otras excepciones
return 'Ocurrió un error inesperado: ' . $e->getMessage();
}
}
/**
* Insertar usuario en la base de datos (MySQL/PostgreSQL)
*/
public function addUser(): string
{
try {
$db = \Config\Database::connect();
// Verifica si existe la tabla 'users'
if (!$db->tableExists('users')) {
return 'Error: La tabla "users" no existe. Ejecuta primero la migración de la base de datos.';
}
// Inserta los datos
$data = [
'name' => 'ServBay Demo User',
'email' => 'user_' . time() . '@servbay.demo', // Usa time() para email único
];
$db->table('users')->insert($data);
// Confirmación de inserción (opcional)
// if ($db->affectedRows() > 0) {
return 'Usuario agregado exitosamente: ' . $data['email'];
// } else {
// return 'Error: No se pudo agregar el usuario.';
// }
} catch (DatabaseException $e) {
// Captura excepción de base de datos
return 'Error en la base de datos: ' . $e->getMessage() . '. Verifica la conexión y la estructura de la tabla.';
} catch (\Exception $e) {
// Otras excepciones
return 'Ocurrió un error inesperado: ' . $e->getMessage();
}
}
/**
* Listar usuarios de la base de datos (MySQL/PostgreSQL)
*/
public function listUsers(): string
{
try {
$db = \Config\Database::connect();
// Verifica si existe la tabla 'users'
if (!$db->tableExists('users')) {
return 'Error: La tabla "users" no existe. Ejecuta primero la migración de la base de datos.';
}
// Consulta todos los usuarios
$users = $db->table('users')->get()->getResult();
if (empty($users)) {
return 'No se encontraron usuarios en la base de datos.';
}
// Devuelve la lista de usuarios en formato JSON
return json_encode($users);
} catch (DatabaseException $e) {
// Captura excepción de base de datos
return 'Error en la base de datos: ' . $e->getMessage() . '. Verifica la conexión y la estructura de la tabla.';
} catch (\Exception $e) {
// Otras excepciones
return 'Ocurrió un error inesperado: ' . $e->getMessage();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
Este controlador actualizado incluye salidas más claras y manejo de errores básico para facilitar el diagnóstico.
Configurar rutas
Para acceder vía URL a los métodos agregados en el controlador Home
, necesitas definir las rutas en el archivo de rutas de CodeIgniter.
Edita app/Config/Routes.php
. Ubica la sección de definición de $routes
y agrega las siguientes reglas:
php
// ... Otras reglas de rutas ...
// Ruta de ejemplo Memcached
$routes->get('/memcached', 'Home::memcached');
// Ruta de ejemplo Redis
$routes->get('/redis', 'Home::redis');
// Rutas de ejemplo de base de datos
$routes->get('/add-user', 'Home::addUser');
$routes->get('/list-users', 'Home::listUsers');
// ... Otras reglas de rutas ...
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
Asegúrate de incorporarlas en la definición existente de $routes
sin sobrescribir las reglas previas.
Accede al sitio web
Tu proyecto CodeIgniter ya está activo en ServBay. Abre un navegador y accede con el dominio configurado:
Página de inicio:
https://servbay-codeigniter-test.local
Deberías ver el mensaje¡Hola ServBay y CodeIgniter!
, lo que indica que tu proyecto está funcionando correctamente bajo el servidor web de ServBay.Ejemplo Memcached:
https://servbay-codeigniter-test.local/memcached
Si Memcached está bien configurado, deberías ver el textoPrueba Memcached exitosa: ¡Hola Memcached desde CodeIgniter!
.Ejemplo Redis:
https://servbay-codeigniter-test.local/redis
Si Redis está bien configurado, verásPrueba Redis exitosa: ¡Hola Redis desde CodeIgniter!
.
Ejemplos de operaciones con base de datos (MySQL/PostgreSQL)
Antes de usar los ejemplos, es necesario ejecutar las migraciones de CodeIgniter para crear la tabla users
.
Crear la estructura de base de datos (migración)
Accede al directorio del proyecto en la terminal:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Crear el archivo de migración: Usa la CLI de CodeIgniter para generar la migración de la tabla
users
:bashphp spark make:migration create_users_table
1Esto generará un archivo PHP en el directorio
app/Database/Migrations
.Editar la migración: Abre el archivo creado (nombre similar a
YYYY-MM-DD-HHMMSS_CreateUsersTable.php
) y edita el métodoup()
para definir la estructura. Recuerda que MySQL y PostgreSQL difieren en la sintaxis del valor por defecto para la marca temporal (CURRENT_TIMESTAMP
vsNOW()
), y CodeIgniter'sRawSql
ayuda a gestionar esto. Ejemplo:php<?php namespace App\Database\Migrations; use CodeIgniter\Database\Migration; use CodeIgniter\Database\RawSql; // Importa la clase RawSql class CreateUsersTable extends Migration { public function up() { $this->forge->addField([ 'id' => [ 'type' => 'INT', 'constraint' => 5, 'unsigned' => true, 'auto_increment' => true, ], 'name' => [ 'type' => 'VARCHAR', 'constraint' => '100', ], 'email' => [ 'type' => 'VARCHAR', 'constraint' => '100', 'unique' => true, // Email único ], 'created_at' => [ 'type' => 'TIMESTAMP', // Escoge la expresión según la base de datos // MySQL: 'default' => new RawSql('CURRENT_TIMESTAMP'), // PostgreSQL: 'default' => new RawSql('NOW()'), 'default' => new RawSql($this->db->getPlatform() === 'MySQLi' ? 'CURRENT_TIMESTAMP' : 'NOW()'), ], 'updated_at' => [ 'type' => 'TIMESTAMP', // MySQL: 'default' => new RawSql('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'), // PostgreSQL: 'default' => new RawSql('NOW()'), 'default' => new RawSql($this->db->getPlatform() === 'MySQLi' ? 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' : 'NOW()'), ], ]); $this->forge->addKey('id', true); // Define la clave primaria $this->forge->createTable('users'); // Crea la tabla } public function down() { // Para revertir la migración $this->forge->dropTable('users'); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51Nota: El ejemplo selecciona dinámicamente la sintaxis correcta según el sistema. En proyectos reales, podrías crear migraciones separadas para cada base de datos para mayor robustez.
Ejecutar la migración: En la terminal, ejecuta el siguiente comando para crear la tabla
users
:bashphp spark migrate
1Debes ver un mensaje confirmando el éxito. También puedes comprobar con herramientas como Adminer que se creó la tabla en
servbay_codeigniter_app
.
Prueba de ejemplos de base de datos
Asegúrate que la conexión de base de datos esté configurada correctamente en app/Config/Database.php
y que la tabla users
exista.
Agregar usuario: Accede a
https://servbay-codeigniter-test.local/add-user
Cada visita a este enlace insertará un usuario nuevo y verás algo comoUsuario agregado exitosamente: user_XXXXXXXXXX@servbay.demo
.Listar usuarios: Accede a
https://servbay-codeigniter-test.local/list-users
Verás los usuarios registrados en formato JSON.
Resumen
Siguiendo estos pasos, habrás creado, configurado y ejecutado exitosamente un proyecto CodeIgniter en ServBay para macOS. Aprendiste a crear el proyecto con Composer, configurar el servidor y directorio correcto, vincular la base de datos y caché y probar su integración mediante ejemplos. ServBay simplifica la instalación y administración de tu entorno local, permitiéndote concentrar en el desarrollo de tu aplicación CodeIgniter.