Le développement de CodeIgniter a repris depuis quelques temps et la 3ème version du framework est sortie depuis le 30 mars 2015. Découvrons quelles sont les nouveautés apportées et les raisons pour lesquelles il faut migrer vers cette nouvelle version.

Contexte

Ellislab est l'ancien propriétaire de CodeIgniter. Après avoir cherché à le vendre pendant longtemps, c'est finalement une université, la British Columbia Institute of Technology, à Vancouver qui rachète le projet comme annoncé le 6 octobre 2014.

Le dévéloppement reprend et codeigniter.com devient le nouveau site officiel du framework. Il est mis à jour et les actualités sur le développement abondent.

Le 30 mars 2015, un simple tweet annonce la sortie de la 3ème version en version stable.

Téléchargement

Le framework peut être téléchargé à cette adresse : www.codeigniter.com/download. Bonne nouvelle, les fichiers de traductions sont enfin également disponibles.

De nombreuses modifications ont été apportées avec cette version 3.0.0, voici les principales. Vous pouvez néanmoins voir le changlog pour plus de détails.

Nouvelle licence

Codeigniter passe désormais sous la MIT licence. Cela signifie que le framework perd son côté propriétaire (il appartenait à Ellislab). Il est maintenant libre et open source permettant ainsi à quiconque de l'utiliser, le copier, le modifier, le fusionner, le publier, le distribuer, le vendre et de changer sa licence.

Prérequis

PHP 5.1.6 n'est plus supporté par cette nouvelle version du framework. Il vous faudra à minima PHP 5.2.4 cependant PHP 5.4 ou une version ultérieure est recommandée.

Convention de nommages

Une nouvelle convention de nommage est demandée.

Classes (controllers, models...)

Le nom du fichier ainsi que de la classe doit commencer par une majuscule, puis être suivi uniquement par des minuscules. Les espaces seront simulés par des underscores.

Super_class.php
class Super_class

Exemples de nommage d'un fichier de classe et sa déclaration

Autres fichiers (views, config...)

Le nom du fichier ne doit comporter que des minuscules (même la première lettre). Les espaces seront simulés par des underscores.

application_config.php

Exemple de nommage d'un fichier

Fonctions

Le nom des fonctions est écrit en minuscule. Les underscores feront office de séparateurs.

function get_file_properties()

Exemple de nommage d'une fonction

Variables

Le nom des variables utilise exactement les mêmes conventions de nommage que les fonctions. Elles doivent être concises et compréhensibles.

$str, $buffer, $group_id, $last_city

Exemples de nommage de variables

Sessions

La librairie Session a enfin été complètement recodée. Elle utilise maintenant des drivers, au nombre de 4, permettant des configuration différentes (modifiable via config.php) :

Driver "files"

C'est celui qui est utilisé par défaut, il utilise le système de fichier du serveur pour enregistrer les informations. Il est utilisé par défaut car il est supporté par tous les systèmes (tous ont un système de fichiers) mais devra probablement être modifié car il risque d'être lent.

Driver "database"

Les informations de sessions sont enregistrées en base de données. Si vous utilisez une base de données, je conseille fortement son utilisation, c'est rapide, efficace et sécurisé.

Comme avant, il vous faudra créer une table via ce script :

CREATE TABLE IF NOT EXISTS `ci_sessions` (
    `id` varchar(40) NOT NULL,
    `ip_address` varchar(45) NOT NULL,
    `timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
    `data` blob NOT NULL,
    PRIMARY KEY (id),
    KEY `ci_sessions_timestamp` (`timestamp`)
);

Un petit changement de configuration sera donc nécessaire :

$config['sess_driver'] = 'database';
$config['sess_save_path'] = 'ci_sessions';

Exemple de configuration de session par base de données dans le fichier "config.php"

Driver "redis"

Redis est un système open source de sauvegarde de données par cache. Son utilisation requiert l'installation de l'extension PHP phpredis ce qui n'est pas toujours possible pour tous les hébergements. Néanmoins, les performances sont excellentes.

$config['sess_driver'] = 'redis';
$config['sess_save_path'] = 'tcp://localhost:6379';

Exemple de configuration de session par redis dans le fichier "config.php"

Driver "memcached"

Cette solution est assez similaire à redis. Elle utilise memcached de PHP pour fonctionner ce qui la rend plus polyvalente.

$config['sess_driver'] = 'memcached';
$config['sess_save_path'] = 'localhost:11211';

Exemple de configuration de session par memcached dans le fichier "config.php"

Base de données

Le driver par défaut est dorénavant "mysqli". Les anciens (‘mysql’, ‘sqlite’, ‘mssql’ et ‘pdo/dblib’) sont maintenant dépréciés. Il est possible d'utiliser directement PDO via l'utilisation de subdrivers.

Query Builder se voit également ajouter de nombreux changements, en voici quelques un :

  • Ajout de nouvelles fonctions permettant de retourner la requête sous forme de chaine de caractères sans l'exécuter. Elles s'utilisent de la même façon que get() avec un second paramètre permettant de spécifier si la requête est réinitialisée ou non.
get_compiled_select(), get_compiled_insert(), get_compiled_update(), get_compiled_delete()
  • Les 4 fonctions de compilation de requêtes Le query grouping permet de gérer les parenthèses de requêtes notamment via les fonctions group_start(), group_end(). Les fonctions de parenthèses peuvent être imbriquées, permettant de gérer des cas assez complexes.
$this->db->select('*')->from('my_table')
        ->group_start()
                ->where('a', 'a')
                ->or_group_start()
                        ->where('b', 'b')
                        ->where('c', 'c')
                ->group_end()
        ->group_end()
        ->where('d', 'd')
->get();

// Requête générée :
// SELECT * FROM (`my_table`) WHERE ( `a` = 'a' OR ( `b` = 'b' AND `c` = 'c' ) ) AND `d` = 'd'

Exemple d'utilisation des fonctions group_start(), group_end()

  • Ajout du tri aléatoire :
order_by(seed, 'RANDOM')

Templates d'erreur

L'affichage des pages d'erreurs est toujours disponible, néanmoins la localisation des vues a changer. Elle se trouve maintenant logiquement dans le dossier views/errors/. Vous pouvez changer son fonctionnement en indiquant un autre chemin via la variable de configuration $config['error_views_path'].

A noter que des templates d'erreurs ont été ajoutés pour les applications utilisant une interface en ligne de commande (CLI) pour éviter de retourner du code HTML.

Conclusion

Cette version 3.0.0 de CodeIgniter ne révolutionne pas le framework. Il y a de nombreux changements mais pas d'ajout majeurs. Il faudra surement attendre les prochaines versions pour cela.

Pour finir, voici quelques liens qui vous seront surement très utiles :