====== CodeIgniter ======
Framework de [[informatica:programacion:php|PHP]].
* [[https://codeigniter.com|Web oficial]]
Las notas están centradas en la versión 4. Para la versión 3, existe [[informatica:programacion:php:frameworks:codeigniter_3|otra página]].
===== Modelo Vista Controlador =====
CodeIgniter sigue el paradigma de programación Modelo-Vista-Controlador.
* Modelo: datos
* Vista: resultado visual
* Controlador: intermediario entre los datos y la presentación.
Además, CodeIgniter sigue el patrón FrontController, es decir, hay un script que en base a lo que le pasemos por URL, enviará la petición al componente adecuado. Esquema:
http://example.com/[clase-controlador]/[metodo-controlador]/[argumentoss]
Por ejemplo:
http://example.com/noticias/ver/10
==== Controlador ====
''app/Controllers/Pages.php''
==== Modelo ====
''app/Models''
* https://codeigniter.com/userguide3/database/query_builder.html
===== Instalación =====
Requisitos:
* Versión de PHP 7.3 o superior con las siguientes extensiones:
* ''intl''
* ''mbstring''
* ''php-json''
* ''php-mysqlnd''
* ''php-xml''
Se [[https://github.com/CodeIgniter4/framework/releases/latest|descarga]] y descomprime en el document root del servidor web.
Tendremos la siguiente estructura de directorios:
app/
public/
system/
writable/
La web se servirá desde el directorio ''public'' (es diferente respecto a versiones anteriores del framework)
La carpeta ''writable'' debe de ser modificable por el usuario que ejecuta el servidor web.
==== Docker Compose ====
Ejemplo de configuración de de infraestructura LEMP para instalar CodeIgniter
La imagen de PHP de Alpine la personalizamos con el siguiente ''Dockerfile'':
FROM php:8-fpm-alpine
RUN apk add --update --no-cache icu-dev oniguruma
# Instalación extensiones PHP
RUN docker-php-ext-install mysqli pdo_mysql intl
# Instalación de Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer
La carpeta ''/var/www/html/writable'' (y todo lo que contenga) debe ser accesible para escritura por el servidor web. Si estamos en desarrollo, podemos ir a lo loco y optar por:
chmod 777 -R /var/www/html/writable
Sin embargo, la recomendación es:
chown -R /var/www/html/writable
===== Configuración =====
==== Nginx ====
server{
(...)
root /var/www/example.com/public;
index index.php index.html index.htm;
(...)
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
...
}
Si estuviese en un subdirectorio, por ejemplo, ''ci'':
server{
...
location /ci {
try_files $uri $uri/ /ci/index.php?/$request_uri;
}
...
}
Para configuración general más habitual, se puede emplear el fichero ''env'' en lugar de ir a cada uno de los ficheros. Antes de nada, el fichero hay que renombrarlo a ''.env''.
Poner CodeIgniter en modo desarrollo:
CI_ENVIRONMENT = development
# CI_ENVIRONMENT = production
Establecer la URL del proyecto:
app.baseURL = 'https://mipagina.com/'
Configuración de la base de datos:
database.default.hostname = basedatos:PUERTO
database.default.database = nombre-base-datos
database.default.username = usuario-base-datos
database.default.password = contraseña-base-datos
database.default.DBDriver = MySQLi
===== Configuración inicial =====
Abrimos ''app/Config/App.php'' y establecemos la URL de base:
public $baseURL = 'http://miweb.com/';
Si vamos a usar una base de datos, abrimos ''app/Config/Database.php'' y configuramos:
public $default = [
'DSN' => '',
'hostname' => 'localhost',
'username' => '',
'password' => '',
'database' => '',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
];
==== Fichero env ====
Podemos establecer ciertas opciones/variables de configuración creando un fichero llamado ''.env''. La instalación de CodeIgniter viene con uno de ejemplo llamado ''env'' (sin el punto inicial)
====== Recursos ======
* [[https://www.youtube.com/watch?v=uYX9FLi1BYg|CodeIgniter 4 User Login Tutorial - Part 1 - Project Setup & HTML]]
* [[https://stackoverflow.com/questions/30692283/codeigniter-uri-class-how-can-i-use-hyphen-instead-underscore|Usar guión bajo en lugar de guión como separador]]
* [[https://includebeer.com/en/blog/how-to-build-a-basic-web-application-with-codeigniter-4-part-1|How to build a basic web application with CodeIgniter 4 (part 1)]]