Créer et exécuter un projet CodeIgniter
Qu'est-ce que CodeIgniter ?
CodeIgniter est un framework PHP pour le développement d'applications web, réputé pour sa légèreté et ses hautes performances. Suivant le modèle de conception Model-View-Controller (MVC), il permet aux développeurs de créer rapidement des applications web puissantes. Sa structure épurée, son excellente rapidité et sa facilité d'apprentissage en font un choix privilégié pour de nombreux développeurs PHP.
Principales caractéristiques et avantages de CodeIgniter
- Noyau léger : Le système central de CodeIgniter se limite aux composants essentiels, offrant ainsi un temps de chargement exceptionnel.
- Performances exceptionnelles : Pensé pour l’efficacité, il permet de gérer de nombreuses requêtes simultanées et garantit une application rapide.
- Prise en main rapide : Documentation claire et API intuitive, rendant le démarrage simple même pour les débutants.
- Grande flexibilité : Les développeurs peuvent intégrer facilement des bibliothèques tierces selon leurs besoins, permettant d’élargir et de personnaliser les fonctionnalités.
- Communauté active : Une communauté large et dynamique offre support et ressources abondantes.
CodeIgniter répond aussi bien aux exigences de petits projets qu’à celles des applications d’entreprise, facilitant la création efficace de solutions web de haute qualité.
Installer l’environnement de développement CodeIgniter avec ServBay
ServBay est une solution locale dédiée au développement web sur macOS et Windows, intégrant PHP, des bases de données (MySQL, PostgreSQL, MongoDB), des services de cache (Redis, Memcached), des serveurs web (Caddy, Nginx, Apache) et une interface de gestion conviviale. Grâce à ServBay, vous pouvez installer et gérer rapidement l’environnement nécessaire à CodeIgniter.
Ce guide détaille comment utiliser l’environnement PHP et la fonctionnalité Sites Web de ServBay pour créer, configurer et exécuter un projet CodeIgniter, avec l’intégration de divers services de base de données et de cache.
Pré-requis
Avant de commencer, assurez-vous d’avoir :
- ServBay correctement installé et lancé sur macOS ou Windows.
- Activé la version de PHP nécessaire (par exemple PHP 8.3) via ServBay.
- Activé les paquets de bases de données et de cache souhaités (MySQL, PostgreSQL, Redis, Memcached) dans ServBay.
Créer un projet CodeIgniter
ServBay recommande de regrouper vos projets web dans les répertoires suivants pour une meilleure gestion locale :
- macOS :
/Applications/ServBay/www
- Windows :
C:\ServBay\www
Installer Composer
ServBay inclut déjà Composer lors de l’installation, vous n’avez donc généralement pas besoin d’installation supplémentaire. Utilisez simplement la commande
composer
dans le terminal.Accéder au répertoire racine du site
Ouvrez le terminal et placez-vous dans le répertoire racine recommandé :
macOS :
bashcd /Applications/ServBay/www
1Windows :
cmdcd C:\ServBay\www
1Créer le projet CodeIgniter
Utilisez Composer pour créer un projet CodeIgniter 4. Nous nommons le dossier du projet
servbay-codeigniter-app
:bashcomposer create-project codeigniter4/appstarter servbay-codeigniter-app
1Composer téléchargera l’ossature et les dépendances de CodeIgniter dans le dossier
servbay-codeigniter-app
.Entrer dans le dossier du projet
Accédez au dossier du projet nouvellement créé :
macOS :
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Windows :
cmdcd C:\ServBay\www\servbay-codeigniter-app
1
Configuration initiale
Configurer la connexion à la base de données
La configuration de la base de données dans CodeIgniter se trouve dans le fichier app/Config/Database.php
. Avant toute utilisation, renseignez les informations de connexion dans ce fichier.
Tout d’abord, si vous prévoyez d’utiliser une base de données, créez-la dans ServBay via un outil tel qu’Adminer ou phpMyAdmin (accessibles depuis l’interface ServBay). Nommez-la par exemple servbay_codeigniter_app
.
Modifiez ensuite le fichier app/Config/Database.php
, localisez le tableau $default
et complétez selon le type de base de données activé (MySQL ou PostgreSQL). Les identifiants ServBay par défaut sont généralement root
et password
.
Exemple de configuration MySQL :
php
public $default = [
'DSN' => '',
'hostname' => '127.0.0.1', // La base de données ServBay écoute généralement sur 127.0.0.1
'username' => 'root', // Nom d’utilisateur par défaut ServBay
'password' => 'password', // Mot de passe par défaut ServBay
'database' => 'servbay_codeigniter_app', // Nom de votre base de données créée
'DBDriver' => 'MySQLi', // Définissez selon le type (MySQL = MySQLi ou Pdo)
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306, // Port MySQL par défaut
];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Pour PostgreSQL, utilisez 'DBDriver' => 'Postgre'
, le port par défaut est 5432
et certains paramètres de gestion des caractères peuvent nécessiter des ajustements.
Configurer la connexion au cache (Memcached/Redis)
Si vous souhaitez intégrer Memcached ou Redis comme système de cache, configurez le fichier app/Config/Cache.php
.
Ouvrez app/Config/Cache.php
et repérez la section correspondante. ServBay utilise le port 11211
pour Memcached et 6379
pour Redis, habituellement sans mot de passe.
Exemple de configuration Memcached :
php
public $memcached = [
'host' => '127.0.0.1', // Memcached sur 127.0.0.1 avec ServBay
'port' => 11211, // Port par défaut Memcached
'weight' => 1,
];
1
2
3
4
5
2
3
4
5
Exemple de configuration Redis :
php
public string $handler = 'redis'; // Définit Redis comme gestionnaire de cache par défaut
public $default = [ // Configuration Redis dans le tableau default
'host' => '127.0.0.1', // Redis sur 127.0.0.1 avec ServBay
'password' => null, // Pas de mot de passe par défaut
'port' => 6379, // Port par défaut Redis
'timeout' => 0,
'database' => 0,
];
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Adaptez les sections selon les services de cache que vous avez activés dans ServBay.
Configurer le serveur web (paramétrage du site dans ServBay)
Utilisez la fonctionnalité Sites Web de ServBay pour indiquer au serveur web de pointer vers votre projet CodeIgniter.
- Lancez l’application ServBay.
- Allez dans l’onglet Sites Web.
- Cliquez sur le bouton
+
dans le coin inférieur gauche pour ajouter un nouveau site. - Renseignez les informations du site :
- Nom : Choisissez un nom identifiable, par exemple
Mon premier site CodeIgniter
. - Domaine : Définissez le domaine local pour l’accès, par exemple
servbay-codeigniter-test.local
. ServBay gère automatiquement la résolution.local
. - Type de site : Sélectionnez
PHP
. - Version PHP : Choisissez la version souhaitée, par exemple
8.3
. - Racine du site : À cette étape, soyez attentif : le fichier d’entrée (
index.php
) de CodeIgniter se trouve dans le dossierpublic
à la racine du projet. Définissez donc la racine du site sur le dossierpublic
:/Applications/ServBay/www/servbay-codeigniter-app/public
.
- Nom : Choisissez un nom identifiable, par exemple
- Cliquez sur Ajouter pour enregistrer.
- Si ServBay demande de confirmer les modifications, validez.
Pour des instructions détaillées, consultez Ajouter votre premier site.
Ajouter un code d’exemple
Pour vérifier le bon fonctionnement du projet et tester la connectivité aux bases de données et caches, modifions le contrôleur Home
par défaut de CodeIgniter et ajoutons des méthodes de démonstration.
Éditez le fichier app/Controllers/Home.php
et remplacez son contenu par :
php
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
use CodeIgniter\Database\Exceptions\DatabaseException; // Importation de la classe d’exception base de données
use CodeIgniter\Cache\Exceptions\CacheException; // Importation de la classe d’exception cache
class Home extends Controller
{
/**
* Méthode page d’accueil par défaut
*/
public function index(): string
{
// Retourne un message de bienvenue simple
return '<h1>Hello ServBay and CodeIgniter!</h1><p>Your CodeIgniter project is running on ServBay.</p>';
}
/**
* Méthode exemple Memcached
*/
public function memcached(): string
{
try {
$cache = \Config\Services::cache();
// Tente d’écrire dans le cache
$success = $cache->save('servbay_memcached_key', 'Hello Memcached from CodeIgniter!', 60); // Cache pour 60 secondes
if (!$success) {
return 'Error: Failed to save data to Memcached. Check Memcached service and configuration.';
}
// Tente de lire depuis le cache
$value = $cache->get('servbay_memcached_key');
if ($value === null) {
return 'Error: Failed to get data from Memcached. Cache might have expired or service is down.';
}
return 'Memcached Test Success: ' . $value;
} catch (CacheException $e) {
// Capture des exceptions liées au cache
return 'Cache Error: ' . $e->getMessage() . '. Ensure Memcached service is running and configured correctly.';
} catch (\Exception $e) {
// Capture des autres exceptions potentielles
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Méthode exemple Redis
*/
public function redis(): string
{
try {
$cache = \Config\Services::cache();
// Tente d’écrire dans le cache
$success = $cache->save('servbay_redis_key', 'Hello Redis from CodeIgniter!', 60); // Cache pour 60 secondes
if (!$success) {
return 'Error: Failed to save data to Redis. Check Redis service and configuration.';
}
// Tente de lire depuis le cache
$value = $cache->get('servbay_redis_key');
if ($value === null) {
return 'Error: Failed to get data from Redis. Cache might have expired or service is down.';
}
return 'Redis Test Success: ' . $value;
} catch (CacheException $e) {
// Capture des exceptions liées au cache
return 'Cache Error: ' . $e->getMessage() . '. Ensure Redis service is running and configured correctly.';
} catch (\Exception $e) {
// Capture des autres exceptions potentielles
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Ajoute un utilisateur en base (MySQL/PostgreSQL)
*/
public function addUser(): string
{
try {
$db = \Config\Database::connect();
// Vérifie si la table 'users' existe (mesure préventive)
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Insertion des données
$data = [
'name' => 'ServBay Demo User',
'email' => 'user_' . time() . '@servbay.demo', // Utilisation de time() pour un email unique
];
$db->table('users')->insert($data);
// Optionnel : vérifier le succès de l’insertion
// if ($db->affectedRows() > 0) {
return 'User added successfully: ' . $data['email'];
// } else {
// return 'Error: Failed to add user.';
// }
} catch (DatabaseException $e) {
// Capture des exceptions liées à la base de données
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Capture des autres exceptions potentielles
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Liste les utilisateurs depuis la base (MySQL/PostgreSQL)
*/
public function listUsers(): string
{
try {
$db = \Config\Database::connect();
// Vérifie si la table 'users' existe
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Récupère tous les utilisateurs
$users = $db->table('users')->get()->getResult();
if (empty($users)) {
return 'No users found in the database.';
}
// Retourne la liste des utilisateurs au format JSON
return json_encode($users);
} catch (DatabaseException $e) {
// Capture des exceptions liées à la base de données
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Capture des autres exceptions potentielles
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
Ce contrôleur révisé fournit une sortie claire et une gestion basique des erreurs pour faciliter le diagnostic.
Configuration des routes
Pour accéder aux méthodes d’exemple du contrôleur Home
via l’URL, ajoutez les règles de routage dans le fichier app/Config/Routes.php
.
Modifiez app/Config/Routes.php
et ajoutez dans la définition de $routes
:
php
// ... autres règles de routes ...
// Route exemple Memcached
$routes->get('/memcached', 'Home::memcached');
// Route exemple Redis
$routes->get('/redis', 'Home::redis');
// Routes exemples base de données
$routes->get('/add-user', 'Home::addUser');
$routes->get('/list-users', 'Home::listUsers');
// ... autres règles de routes ...
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
Veillez à intégrer ces nouvelles règles dans l’existant sans écraser le reste.
Accéder au site
Votre projet CodeIgniter est maintenant configuré et opérationnel dans ServBay. Ouvrez votre navigateur et accédez au domaine choisi :
Page d’accueil :
https://servbay-codeigniter-test.local
Vous devriez voir s’afficherHello ServBay and CodeIgniter!
, preuve du bon fonctionnement via le serveur web ServBay.Test Memcached :
https://servbay-codeigniter-test.local/memcached
Si Memcached fonctionne, le messageMemcached Test Success: Hello Memcached from CodeIgniter!
s’affichera.Test Redis :
https://servbay-codeigniter-test.local/redis
Si Redis est bien configuré, le messageRedis Test Success: Hello Redis from CodeIgniter!
s’affichera.
Exemple d’opérations sur la base de données (MySQL/PostgreSQL)
Avant les tests en base, vous devez exécuter la commande de migration CodeIgniter pour créer la table users
.
Création de la structure de base (lancer la migration)
Ouvrez le terminal et placez-vous dans le dossier du projet CodeIgniter :
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Générez le fichier de migration : Utilisez l’outil CLI CodeIgniter pour ajouter le fichier de migration de la table
users
:bashphp spark make:migration create_users_table
1Un fichier PHP est généré dans
app/Database/Migrations
.Éditez le fichier de migration : Ouvrez ce fichier (nom du type
YYYY-MM-DD-HHMMSS_CreateUsersTable.php
) et ajustez la méthodeup()
pour définir les colonnes et index. Notez que MySQL et PostgreSQL diffèrent subtilement dans la syntaxe des champs horodatés (CURRENT_TIMESTAMP
vsNOW()
), que CodeIgniter gère avecRawSql
. Exemple :php<?php namespace App\Database\Migrations; use CodeIgniter\Database\Migration; use CodeIgniter\Database\RawSql; // N’oubliez pas d’importer RawSql class CreateUsersTable extends Migration { public function up() { $this->forge->addField([ 'id' => [ 'type' => 'INT', 'constraint' => 5, 'unsigned' => true, 'auto_increment' => true, ], 'name' => [ 'type' => 'VARCHAR', 'constraint' => '100', ], 'email' => [ 'type' => 'VARCHAR', 'constraint' => '100', 'unique' => true, // Email unique ], 'created_at' => [ 'type' => 'TIMESTAMP', // Défaut selon la base // MySQL : 'default' => new RawSql('CURRENT_TIMESTAMP'), // PostgreSQL : 'default' => new RawSql('NOW()'), 'default' => new RawSql($this->db->getPlatform() === 'MySQLi' ? 'CURRENT_TIMESTAMP' : 'NOW()'), // Choix dynamique ], 'updated_at' => [ 'type' => 'TIMESTAMP', // MySQL : 'default' => new RawSql('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'), // PostgreSQL : 'default' => new RawSql('NOW()'), 'default' => new RawSql($this->db->getPlatform() === 'MySQLi' ? 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' : 'NOW()'), // Choix dynamique ], ]); $this->forge->addKey('id', true); // Déclare id comme clé primaire $this->forge->createTable('users'); // Crée la table users } public function down() { // Pour rollback, supprime la table users $this->forge->dropTable('users'); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51Remarque : Cet exemple utilise une logique simple pour appliquer la syntaxe adéquate selon la base. Sur un projet exigeant, envisagez de créer des migrations distinctes pour chaque type de base.
Lancez la migration : Exécutez la commande suivante pour créer la table
users
:bashphp spark migrate
1Un message devrait confirmer la réussite. Vérifiez également dans l’outil de gestion de base ServBay (comme Adminer) si la table existe bien.
Tester les exemples sur la base
Assurez-vous que la configuration de la base (app/Config/Database.php
) est correcte et que la table existe bien via migration.
Ajouter un utilisateur : Accédez à
https://servbay-codeigniter-test.local/add-user
Chaque visite de cette URL insère un nouvel utilisateur dans la table. Le message affiché devrait être du typeUser added successfully: user_XXXXXXXXXX@servbay.demo
.Lister les utilisateurs : Accédez à
https://servbay-codeigniter-test.local/list-users
Cette URL interroge la tableusers
et retourne le listing des utilisateurs au format JSON.
Conclusion
En suivant ces étapes, vous avez créé, configuré et lancé un projet CodeIgniter dans ServBay sur macOS. Vous avez appris à générer un projet avec Composer, à configurer le serveur ServBay pour pointer vers le bon dossier, à gérer les connexions base de données et cache dans CodeIgniter, et à valider l’intégration avec des exemples concrets. ServBay simplifie l’installation et la gestion de votre environnement local, vous permettant de vous concentrer sur le développement de l’application CodeIgniter.