L'équipe de développement vient de frapper un grand coup avec la sortie simultanée de CodeIgniter 4.6.5 et CodeIgniter 4.7.0. Cette mise à jour majeure du célèbre framework PHP introduit des changements structurels profonds, notamment l'exigence de PHP 8.2 pour la version 4.7.0. Entre l'arrivée d'un mode worker expérimental pour des performances décuplées et une sécurité renforcée, les développeurs disposent désormais d'outils modernisés pour bâtir des applications web robustes et rapides.

 

PHP 8.2 et Mode Worker : le virage de la performance

Le passage à PHP 8.2 comme version minimale pour CodeIgniter 4.7.0 n'est pas une simple formalité technique. Ce choix permet au framework d'exploiter pleinement les fonctionnalités modernes du langage, offrant ainsi une base plus saine et performante. La grande nouveauté réside toutefois dans le support expérimental de FrankenPHP Worker Mode.

En permettant aux processus de rester actifs entre les requêtes, ce mode promet des gains de rapidité massifs pour les applications à fort trafic. D'ailleurs, de nouvelles commandes comme php spark worker:install facilitent l'intégration de cette architecture. Parallèlement, le système de cache s'enrichit d'un pilote APCu haute performance, idéal pour les déploiements sur serveur unique cherchant à minimiser la latence.

 

Évolutions majeures de la version 4.7.0

  • Exigence PHP 8.2 : Le framework monte en version minimale pour exploiter les dernières optimisations du langage.
  • Mode Worker FrankenPHP : Support expérimental permettant de garder l'application en mémoire pour des performances extrêmes.
  • Système de Signaux : Nouvelle architecture événementielle via SignalTrait pour une communication fluide entre composants.
  • Attributs de Contrôleur : Modernisation du code grâce aux attributs natifs de PHP 8+.
  • Transformateurs d'API : Nouvelle structure pour formater élégamment les données avant l'envoi des réponses API.
  • Support CSP3 complet : Intégration des nouvelles directives de sécurité comme script-src-elem et le hachage SHA-256/512.
  • Gestion des Enums : Support natif du casting d'énumérations PHP dans les modèles et les entités.
  • Rotation des clés de chiffrement : Possibilité de configurer previousKeys pour migrer vos données chiffrées sans interruption.
  • Pilote de cache APCu : Nouvelle option de stockage haute performance pour les environnements sur serveur unique.
  • Verrouillage des migrations : Empêche l'exécution simultanée de migrations dans les infrastructures distribuées.

 

Améliorations de la base de données et du cache

  • Méthode remember() : Ajout d'un système de mise en cache intelligente (cache-aside) directement dans CacheInterface.
  • Validation des clés primaires : Les modèles valident désormais les clés avant la requête, évitant des erreurs de base de données inutiles.
  • Ping de connexion : Nouvelle méthode ping() pour vérifier si la base de données répond avant de tenter une reconnexion.
  • Suivi des modifications profond : Les entités suivent désormais les changements dans les structures JSON et les tableaux imbriqués.
  • Optimisation CURLRequest : Partage du cache DNS et des connexions pour accélérer les appels HTTP externes.

 

Corrections critiques de la version 4.6.5 (PHP 8.1)

  • Correctif Seeder : Résolution du bug où Seeder::call() ne transmettait pas la connexion aux seeders enfants.
  • Sécurité CSP : Mise à jour de la génération du nonce CSP pour utiliser l'encodage base64, conformément aux spécifications.

 

Changements de rupture (Breaking Changes)

  • Regex_match : Utilisation obligatoire des doubles accolades pour les espaces réservés.
  • Types de retour natifs : Suppression de l'attribut ReturnTypeWillChange au profit du typage strict.
  • Constants Cookie : Les constantes SAMESITE_* utilisent désormais une majuscule au début (ex: Lax au lieu de lax).
  • Suppression d'éléments obsolètes : Retrait de random_string() de type MD5/SHA1 et de certaines méthodes de détection de requêtes.

 

Architecture moderne et sécurité CSP3

CodeIgniter 4.7.0 introduit les Attributs de Contrôleur, permettant une syntaxe plus propre et lisible pour les développeurs habitués aux standards de PHP 8+. Le framework intègre également un système de Signaux via le SignalTrait, facilitant la communication entre les composants sans créer de dépendances rigides.

Côté sécurité, le framework monte en grade avec un support complet de Content Security Policy Level 3. Les développeurs peuvent désormais utiliser des directives avancées comme script-src-elem et des hachages SHA pour protéger leurs utilisateurs.

À noter également pour les administrateurs système : la possibilité de configurer une rotation des clés de chiffrement sans perdre l'accès aux anciennes données, une fonctionnalité cruciale pour la maintenance à long terme.

 

Une transition nécessaire

Cette double sortie marque une scission claire dans l'écosystème. La version 4.6.5 sert de bouée de sauvetage pour ceux qui sont encore bloqués sur PHP 8.1, corrigeant notamment un bug gênant sur le passage des connexions aux seeders de base de données. Cependant, l'avenir se joue sur la 4.7.0.

L'introduction du typage natif dans les interfaces (CacheInterface, QueryInterface) et la validation automatique des clés primaires dans les modèles montrent une volonté de rendre le framework plus prévisible et moins sujet aux erreurs silencieuses. Si les changements majeurs (breaking changes) comme la modification de la syntaxe regex_match demandent une attention particulière lors de la migration, le gain en stabilité et en vitesse justifie largement l'effort.

CodeIgniter confirme ici sa position de challenger sérieux face à Laravel ou Symfony en misant sur une légèreté préservée malgré des fonctionnalités professionnelles.

 

Mise à jour disponible dès maintenant

Pour les projets en production, la mise à jour vers la branche 4.7.0 nécessite une vérification rigoureuse de vos entités, car le suivi des modifications en profondeur (Deep Change Tracking) pourrait impacter vos comparaisons d'objets imbriqués. Les fichiers de configuration peuvent désormais être isolés grâce à une gestion personnalisable du répertoire .env, simplifiant ainsi le déploiement dans des environnements complexes.