7. PHP Framework. Codeigniter4
Introducció a Codeigniter
Primers passos
Abans de submergir-nos en el codi, és imprescindible preparar l'entorn de treball per garantir ...
Descarrega e instal·lació de CodeIgniter
Instal·lació CodeigniterCada cop que vulguem iniciar un projecte amb CodeIgniter haurem d’instal·...
La primera aplicació
Un cop configurat l'entorn, és el moment de posar en marxa el framework i entendre com interactue...
Primera execució CI4
Per fer el debug de les aplicacions desenvolupades amb CI4 emprarem el servidor integrat que ens ...
Les rutes
Que són les rutes?L’arxiu de rutes és l’encarregat de dirigir el trànsit que arriba al servidor d...
El controller
Els controladors tenen diversos rols dins d'una aplicació. El més evident és aquell que li corres...
La vista
Una vista és l’arxiu més simple de tot aplicatiu, habitualment són arxius HTML que contenen porci...
Kint to debug
CodeIgniter tal i com es mostra a Primera execució CI4 incorpora una toolbar per poder debugar le...
Treball amb bases de dades
En aquest apartat aprofundirem en el cor de qualsevol aplicació dinàmica: la gestió i persistènci...
Connexió amb BBDD
La instal·lació de CodeIgniter requereix tenir configurada una connexió a una base de dades. La c...
Migracions
Les migracions és una forma de modificar una base de dades d'una forma estructurada. Podríem edit...
Seeding
La majoria d’aplicacions requereixen tenir un mínim de dades inicialitzades en la base de dades, ...
El model
Un model en el contexte de CodeIgniter és una classe que proporciona una capa d'abstracció per a ...
Migració modifica taula
Si ens trobem amb la necessitat de modificar una taula per afegir-hi algun camp o modificar-ne al...
Seed amb timestamp
En aquest cas la migració ens ha creat tres columnes sense informació i el seeding que teníem cre...
Com crear un seeder d'instal·lació?
És útil tenir un seeder mestre que orquestri tot el procés de "sembra" de la base de dades. Aques...
EXEMPLE. Un blog
La millor manera de consolidar els conceptes de rutes, controladors, models i vistes és mitjançan...
Seguretat. CSRF
La seguretat és un pilar fonamental en el desenvolupament d'aplicacions web modernes. En aquest c...
Que és CSRF?
La falsificació de sol·licituds entre llocs web, també coneguda com a atac d'un sol clic o conduc...
CSRF a CodeIgniter
Els frameworks actuals contenen funcionalitats que permeten controlar la seguretat de l'aplicació...
Tokens CSRF
Que són? Els tokens CSRF (Cross-Site Request Forgery tokens) són una mesura de seguretat utilitz...
Com implementar-ho?
El token s’insereix automàticament com un camp ocult en els formularis HTML, o s’envia en una cap...
EXEMPLE. Un blog amb CSRF
Per afegir la funcionalitat d'inserció és necessari mostrar un formulari i acceptar les dades per...
Helpers
Un helper és un fitxer en CodeIgniter (tant en CI3 com en CI4) que conté un conjunt de funcions a...
Load a helper
Manualment Podem carregar manualment dins d’un controlador, model o vista helper('form'); // Ca...
Helper form
El helper form de CodeIgniter 4 és una col·lecció de funcions útils per generar formularis HTML d...
El meu helper
Com crear-lo? Crear un helper personalitzat a CodeIgniter 4 (CI4) és una manera molt útil de reu...
Validation
La llibreria Validation de CodeIgniter 4 (CI4) és una eina que permet validar dades d’entrada, co...
Missatges personalitzats
A CodeIgniter 4 (CI4), pots definir missatges de validació personalitzats per cada regla de forma...
Internacionalització missatges error
Per la internacionalització de missatges d'error, cal desar els missatges d'error en un fitxer ...
Custom list errors
Per crear una llista d'errors en un format personalitzat serà necessari crear una nova vista que ...
Validate on model
Què és $validationRules? $validationRules és una propietat pública dels models de CI4 que et per...
URL base
La funció base_url() a CodeIgniter és una eina fonamental per gestionar les rutes i enllaços dins...
Custom CSS/JS
El mecanisme tradicional d'incloure un CSS és emprant base_url() <link rel="stylesheet" href="<...
Operador PHP Coalescing ??
L'operador Coalescing (null coalescing operator) a PHP, introduït a PHP 7, és una forma concisa i...
View cells
Algunes aplicacions tenen fragments que es repeteixen en moltes pàgines o en diferents llocs d'un...
Concepte
En CodeIgniter 4, una Cell (o "View Cell") és una característica que et permet encapsular fragmen...
Simple view cell
Les Cells a CodeIgniter 4 són una eina excel·lent per encapsular lògica i presentació HTML de fra...
Controlled cells
Les Cells a CodeIgniter són una eina extremadament potent per crear components reutilitzables que...
CLI Commands
L'eficiència en el desenvolupament modern passa per dominar la interfície de línia de comandes (C...
El CLI de CodeIgniter
El CLI (Command Line Interface) de CodeIgniter és una interfície de text que permet als desenvolu...
CLI Generator. Scaffold
La comanda make:scaffold de CodeIgniter 4 és una eina que forma part de l'eina de línia d'ordres ...
CLI db:reboot
Pots instal·lar aquesta utilitat i algunes altres mitjançant la següent instrucció: composer requ...
CLI zip
Aquesta comanda CLI personalitzada anomenada zip, on la seva funcionalitat principal és preparar ...
Query builder
El Query Builder és una classe de CodeIgniter que proporciona una manera de construir consultes S...
Introducció a Query builder
El Query Builder de CodeIgniter és una eina de la capa de base de dades que permet als desenvolup...
select, from, join
Funcions d'Agregació (MAX, MIN, AVG, SUM, COUNT) Aquestes funcions són útils per realitzar càlcu...
where
Mètode where() Bàsic El mètode where() s'utilitza per afegir una clàusula WHERE a la teva consul...
like
El mètode like() s'utilitza per afegir una clàusula LIKE a la consulta, que s'utilitza per fer ce...
groupBy, distinct, having
Mètode groupBy() El mètode groupBy() s'utilitza per agrupar les files d'un conjunt de resultats ...
OrderBy
El Query Builder és una eina potent per construir consultes SQL de forma programàtica. La funció ...
Limit, count
Query Builder (Constructor de consultes) ofereix mètodes molt útils per gestionar el volum de dad...
Insert, update, delete
El Query Builder permet realitzar operacions de manipulació de dades de forma segura i intuïtiva....
Exemple paginació
La paginació és una tècnica clau per gestionar grans volums de dades de manera eficient. En lloc ...
Primers passos. Un paginador senzill.
Crear un paginador en CodeIgniter 4 (CI4) és extremadament senzill perquè el framework ja inclou ...
Paginador customitzat
Podem onfigurar un paginador personalitzat a CodeIgniter 4 adaptant l'aparença dels enllaços de n...
Paginació avançada
El sistema de paginació de CodeIgniter 4 (CI4) permet tenir un control total sobre l'experiència ...
HTML Table
La classe HTML Table (\CodeIgniter\View\Table) de CodeIgniter 4 és una eina molt potent per evita...
Paginador + bootstrap + cercador + ordenació
Aquest és un exemple complet i avançat. Integrarem CodeIgniter 4, Bootstrap 5, i la llibreria HTM...
Entities
Una Entity (Entitat) a CodeIgniter 4 és una classe lleugera que representa una única fila d'una t...
Migration i seeder
Migration Les migracions actuen com un control de versions per a la base de dades. Aquest fitxer...
Entity persona
Creació de Entity Has de crear un nou fitxer a la ruta: app/Entities/Persona.php o executar php ...
Exemple. Llistar i crear
Muntarem l'arquitectura completa per tenir una llista de persones i un formulari funcional per cr...
Config files i settings
Els arxius de configuració són la columna vertebral de qualsevol projecte robust en CodeIgniter 4...
Session variables
Com el protocol HTTP no guarda memòria, CI4 ofereix tres mecanismes clau per persistir dades entr...
Els ID en una BBDD
Tot i ser l'estàndard clàssic, els IDs autonumèrics (AUTO_INCREMENT) són sovint un antipatró en e...
El problema
Sovint, ens quedem amb el INT AUTO_INCREMENT per comoditat, però preparar-los per a problemes del...
UUID v4
L'enfocament "fàcil" per guardar l'UUID és com a VARCHAR(36). Tot i que ho enfocarem des d'aquest...
UUID v7
L'UUID v7 combina la unicitat distribuïda de l'UUID amb l'eficiència d'ordenació (localitat tempo...
Snowflake IDs
Aquesta opció és la preferida per arquitectures d'alt rendiment (High Frequency Trading, Xarxes S...
Codeigniter service
Què és un Service a CI4? Tècnicament, un Service a CodeIgniter 4 és simplement un mètode dins de...
ULID
ULID (Universally Unique Lexicographically Sortable Identifier) cobreix un punt dolç molt interes...
NanoID
NanoID és una opció fascinant que prové de l'ecosistema JavaScript. És l'equivalent modern i "hip...
Els Filters
Els Filters (Filtres) a CodeIgniter 4 són la implementació del patró Middleware. Actuen com a gua...
Exemple. Login + private dashboard
La BBDD: Migration + Model + Entity + Seeder
La BBDD. Migració Primer, definim l'estructura. El camp password serà un VARCHAR(255) per allotj...
El filter Autentica
Filter (Autentica) Implementem la lògica d'autenticació. Important: hem de registrar l'àlies des...
Controller: login + auth + logout + dashboard
Controller (UserDemo) Fitxer: app/Controllers/UserDemo.php <?php namespace App\Controllers; ...
Vistes: login/logout + dashboard
Pàgina login Fitxer: app/Views/userdemo/login.php <!DOCTYPE html> <html lang="ca"> <head> ...
Configuració de Routes
A l'arxiu app/Config/Routes.php, tens dues maneres principals d'aplicar el filtre autentica. Op...
Importar CSVs
A l'hora d'introduir informació en una base de dades, molt habitualment necessitarem incloure inf...
2FA més enllà de la contrasenya
L'autenticació tradicional basada només en usuari i contrasenya és, avui dia, insuficient. Les fi...
Introducció a l'autenticació de dos factors
Què és l'Autenticació de Dos Factors (2FA)? L'autenticació de dos factors (2FA) és una capa de s...
Comparativa llibreries PHP 2FA.
antonioribeiro/google2fa Vs spomky-labs/otphp Tot i que antonioribeiro/google2fa és extremadamen...
La llibreria 2FA
Instal·lació Per no haver de programar nosaltres l'algorisme matemàtic (HMAC-SHA1 i gestió de fi...
Base de dades
Migració: Actualització taula Users Necessitem dos camps nous: secret_2fa: Per guardar la...
La lògica de negoci
Lògica 2FA Activació: L'usuari va a /userdemo/setup-2fa. El servidor genera un sec...
Les vistes
Vista A: Configuració (app/Views/userdemo/setup_2fa.php) Utilitzarem qrcode.js per dibuixar el Q...
Les rutes
Caldrà afegir les rutes necessàries a app/Config/Routes.php. // ... rutes anteriors ... // Ru...
Editors visuals: estàndard WYSIWYG
En el desenvolupament d'aplicacions web modernes, no podem esperar que l'usuari final conegui el ...
L'edició: de l'HTML a l'UX
En el desenvolupament d'aplicacions web, sovint ens trobem amb la necessitat de permetre als usua...
Summernote
Aquest és un exemple complet d'implementació d'un sistema de "Posts" (articles) amb l'editor Su...
CKEditor 5 (Classic Build) Self-Hosted
A diferència de Summernote (que guarda les imatges en Base64 dins el text), CKEditor 5 està dis...
Seguretat AJAX a upload files de CKEditor
Aquest és un punt crític. Un endpoint de pujada d'arxius (upload-image) és, per definició, una po...
i Markdown?
Markdown és una alternativa excel·lent i molt popular entre desenvolupadors (és el que fan servir...
Upload arxius en Markdown
Implementar la pujada d'imatges en un editor Markdown (com EasyMDE) és conceptualment diferent d'...
Cross-Origin Resource Sharing
Què és el CORS? Per defecte, els navegadors tenen una norma de seguretat anomenada Política...
Explorador remot d'arxius: elFinder
En moltes aplicacions web, la gestió de fitxers al servidor de manera visual i intuïtiva és una n...
Integrar elFinder
Integrar un gestor d'arxius com elFinder és el pas definitiu per professionalitzar un lloc web....
Treball amb arxius. elFinder
Mostrarem un controlador "pont" entre CodeIgniter 4 i la llibreria JavaScript elFinder. Té tres ...
CSRF i CORS amb elFinder
El 90% dels problemes en integrar elFinder (o qualsevol gestor AJAX) amb frameworks moderns com C...
GetHash elFinder
Es tracta d'una comanda personalitzada de CodeIgniter 4 (Spark Command) dissenyada per ajudar-nos...
La internacionalització
En l'ecosistema digital actual, el desenvolupament d'aplicacions web no es pot limitar a una únic...
Introducció i configuració
Podem obtenir els arxius d'idioma de CI4 amb la instrucció següent: composer require codeignit...
Les rutes
Per aconseguir URLs amigables i multilingües a CodeIgniter 4 (CI4), com ara example.com/ca/inici ...
Al controller
En determinades ocasions necessitarem saber en quin idioma ens estan demanant la pagina, la funci...
Arxius d'idioma
Aquesta és una part fonamental per mantenir el projecte ordenat. A CodeIgniter 4, els arxius d'...
Helper lang()
Aprofundint en l'ús del helper lang(), estem entrant en una de les característiques més potents d...
lang_url () ?
Al final pot resultar util tenir una funció tipus base_url que ens inclogui el idioma a l'hora de...
Text helper
Les funcions del Text Helper de CodeIgniter, son una eina fonamental per manipular cadenes de tex...
Upload files
Pujada d'un únic fitxer
El procés de pujada d'arxius a CodeIgniter 4 és molt més segur i orientat a objectes que en versi...
Com descarregar un arxiu de writable?
Aquesta és una situació molt habitual. Per defecte, la carpeta writable està fora de l'abast públ...
Pujada de múltiples fitxers
Aquesta és una part fonamental per a qualsevol gestor de fitxers modern. La pujada múltiple a Cod...
Eliminació de fitxers al servidor
Per a qualsevol sistema de gestió de fitxers, tan important és saber pujar un arxiu com saber net...
Pujada arxius Drag&Drop amb formulari standard
Tot i que estem fent un enviament de formulari estàndard (sense AJAX/Fetch), utilitzem JavaScript...
Llibreries
Llibreria Markdown
Què és league/commonmark? És un motor d'anàlisi (parser) de Markdown per a PHP altament extensib...
Llibreria Text2Image (Text captcha)
Codi PHP <?php namespace App\Libraries; /** * Generador de Captcha ...
Llibreries de CI4
CodeIgniter 4 es diferencia d'altres frameworks per ser "lleuger", però el seu nucli (el director...
Redimensior imatges amb la llibreria Image
Per redimensionar imatges a CodeIgniter 4, el framework ens facilita la llibreria Image Manipulat...
Llibreria Email: enviar mail
Aquesta és una de les llibreries més consolidades de CodeIgniter. En la versió 4, s'ha optimitzat...
Llibreria Honeypot
La llibreria Honeypot (pot de mel) és una de les eines de seguretat més elegants de CodeIgniter 4...
Llibreria Throttler
La llibreria Throttler (limitador) és una eina de seguretat fonamental en CodeIgniter 4 dissenyad...
Llibreria Times and Dates
La llibreria Time de CodeIgniter 4 és una extensió de la classe nativa de PHP DateTime, però molt...
Personalitzar les vistes d'error
Personalitzar les pàgines d'error a CodeIgniter 4 és un pas fonamental per donar una imatge profe...
PDFs
Logger i benchmarking
Logger RFC 5424. PSR-3
El Logger de CodeIgniter 4 és l'eina definitiva per a la traçabilitat en entorns professionals. M...
Logger a BBDD
Per registrar els logs directament en una base de dades en lloc de fitxers de text, CodeIgniter 4...
Benchmarking d'aplicacions
L'optimització de codi en entorns professionals requereix dades precises. En lloc de suposar quin...
Profiler de rendiment
Un Profiler personalitzat ens permetrà registrar automàticament el rendiment de l'aplicació a la ...
Ressaltat de sintaxi: Highlight.js
La llibreria Highlight.js (sovint anomenada hljs) és l'estàndard de la indústria. Permet que qual...
Codeigniter Shield
Introducció
CodeIgniter Shield, aquesta és la llibreria d'autenticació i autorització oficial per a CI4. Ja n...
RBAC amb Shield
Per configurar una aplicació completa amb Shield utilitzant sessions i RBAC (Role-Based Access Co...
API Token security
Per validar una API en CodeIgniter 4 utilitzant Shield, passarem d'utilitzar sessions (cookies) a...
Estructura Híbrida (Web + API): Session + Token
Combinar un panell web tradicional (Sessions) i una aplicació mòbil/SPA (Tokens) sota un mateix p...
Session + Token automàtic per {controller}.{method}
Aquesta aproximació permet mantenir el codi DRY (Don't Repeat Yourself). En lloc d'escriure can()...
I configuració dinàmica per BBDD?
Per passar la configuració de seguretat (grups i permisos) del sistema de fitxers de CodeIgniter ...
Shield en BBDD
Per traslladar la configuració de Shield a la base de dades, utilitzarem el sistema de Migracions...
SIENSIS Tools
Documentació oficial KpaCRUD Documentació oficial CICMDTools
Grocery CRUD
Grocery CRUD és una llibreria de codi obert que automatitza la creació d'interfícies de gestió de...
CodeIgniter bonus
Creació auto-installer
Tot desenvolupador acaba plantejant-se: Com automatitzar la posada en marxa d'un projecte? Crear ...
Upgrade/downgrade via web de APP
Per saber quines migracions tenim pendents (les que estan al sistema de fitxers però no a la base...
Upgrade/downgrade genèric
De la classe CodeIgniter\Database\MigrationRunner utilitzarem: setNamespace($namespace): R...
Gestió seeders via web
Mentre que les migracions creen l'estructura de la base de dades, els Seeders s'encarreguen d'omp...
Gestor de routes multi idioma customitzat
De fet, traduir les rutes (ex: /ca/productes vs /en/products) és una pràctica fonamental per al S...