====== 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)]]