Een CodeIgniter-project aanmaken en uitvoeren
Wat is CodeIgniter?
CodeIgniter is een lichtgewicht en hoogwaardig PHP-webapplicatieframework. Het volgt het Model-View-Controller (MVC) ontwerppatroon en is bedoeld om ontwikkelaars te helpen bij het snel bouwen van functionele webapplicaties. Dankzij de eenvoudige structuur, uitstekende prestaties en het gebruiksgemak, is CodeIgniter de favoriete keuze van veel PHP-ontwikkelaars.
Belangrijkste kenmerken en voordelen van CodeIgniter
- Lichtgewicht kern: Het kernsysteem van CodeIgniter is zeer compact en bevat alleen de basiscomponenten die nodig zijn voor de uitvoering, wat resulteert in extreem snelle laadtijden.
- Uitstekende prestaties: Het framework is ontworpen met efficiëntie in gedachten, kan hoge aantallen gelijktijdige verzoeken aan en levert daardoor uitstekende prestaties.
- Eenvoudig te leren: Met duidelijke documentatie en een intuïtieve API kun je de beginselen snel onder de knie krijgen.
- Zeer flexibel: Je kunt naar wens externe bibliotheken integreren en de functionaliteit eenvoudig uitbreiden of aanpassen voor jouw project.
- Actieve community: De grote en actieve gemeenschap biedt veel ondersteuning en een schat aan bronnen.
CodeIgniter is geschikt voor projecten van elk formaat, van kleine websites tot grote enterprise-applicaties, en maakt het makkelijk om kwalitatieve weboplossingen efficiënt op te zetten.
Met ServBay een CodeIgniter-ontwikkelomgeving opzetten
ServBay is een lokale webontwikkeltool voor macOS waarin diverse softwarepakketten zijn geïntegreerd, waaronder PHP, databases (MySQL, PostgreSQL, MongoDB), caching-oplossingen (Redis, Memcached) en webservers (Caddy, Nginx, Apache), plus een gebruiksvriendelijke beheersinterface. Met ServBay beheer en configureer je eenvoudig de omgeving voor je CodeIgniter-project.
In dit artikel leer je hoe je de PHP-omgeving en Websites functie van ServBay gebruikt om een CodeIgniter-project te maken, configureren en starten — inclusief de integratie van diverse databases en cachingdiensten.
Vooraf: Wat heb je nodig?
Voordat je begint, zorg dat je het volgende hebt geregeld:
- ServBay is succesvol geïnstalleerd en draait op je macOS-systeem.
- Je hebt de gewenste PHP-versie (bijv. PHP 8.3) geactiveerd in ServBay.
- Je hebt in ServBay de database- en cachingsoftwarepakketten die je wilt gebruiken geactiveerd (bijv. MySQL, PostgreSQL, Redis, Memcached).
Een CodeIgniter-project aanmaken
ServBay raadt aan om al je websiteprojecten te plaatsen in de map /Applications/ServBay/www
. Zo kan ServBay je lokale sites optimaal beheren.
Composer installeren
ServBay levert Composer standaard mee, dus je hoeft Composer niet apart te installeren. Je kunt direct het
composer
-commando in Terminal gebruiken.Ga naar de rootmap van je website
Open Terminal en ga naar de voorgestelde rootmap:
bashcd /Applications/ServBay/www
1Maak een CodeIgniter-project aan
Maak met Composer een nieuw CodeIgniter 4-project. We noemen de projectmap
servbay-codeigniter-app
:bashcomposer create-project codeigniter4/appstarter servbay-codeigniter-app
1Composer downloadt de CodeIgniter skeleton-applicatie en alle afhankelijkheden naar de map
servbay-codeigniter-app
.Ga naar de projectmap
Navigeer naar de nieuwe projectmap:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1
Eerste configuratie
Databaseverbinding instellen
De databaseconfiguratie van CodeIgniter vind je in het bestand app/Config/Database.php
. Voor je een database gebruikt, moet je hier de verbindingsgegevens invullen.
Maak eerst in ServBay met een beheertool zoals Adminer of phpMyAdmin (te vinden in het ServBay-interface) een database met de naam servbay_codeigniter_app
.
Pas daarna in app/Config/Database.php
het $default
array aan op basis van jouw gekozen database-engine (MySQL of PostgreSQL). De standaard gebruikersnaam en wachtwoord in ServBay zijn meestal root
en password
.
Hieronder een voorbeeld voor MySQL:
php
public $default = [
'DSN' => '',
'hostname' => '127.0.0.1', // ServBay database luistert meestal op 127.0.0.1
'username' => 'root', // Standaard gebruikersnaam van ServBay
'password' => 'password', // Standaard wachtwoord van ServBay
'database' => 'servbay_codeigniter_app', // Database-naam die je hebt aangemaakt
'DBDriver' => 'MySQLi', // Kies 'MySQLi' of 'Pdo' voor MySQL
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306, // Standaard MySQL-poort
];
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
Voor PostgreSQL stel je DBDriver
in op 'Postgre'
, de port
meestal op 5432
, en pas je eventueel de tekensetinstellingen aan.
Cache-verbinding instellen (Memcached/Redis)
Wil je Memcached of Redis als cache gebruiken, dan configureer je dit in app/Config/Cache.php
.
Open app/Config/Cache.php
en zoek het betreffende gedeelte. Memcached luistert standaard op poort 11211
, Redis op poort 6379
— wachtwoord is meestal niet nodig.
Voorbeeld voor Memcached:
php
public $memcached = [
'host' => '127.0.0.1', // ServBay Memcached luistert meestal op 127.0.0.1
'port' => 11211, // Standaard poort Memcached
'weight' => 1,
];
1
2
3
4
5
2
3
4
5
Voorbeeld voor Redis:
php
public string $handler = 'redis'; // Stel standaard cache-handler in op redis
public $default = [ // Redis-configuratie gewoonlijk in default-array
'host' => '127.0.0.1', // ServBay Redis luistert meestal op 127.0.0.1
'password' => null, // Geen standaard wachtwoord voor Redis in ServBay
'port' => 6379, // Standaard Redis-poort
'timeout' => 0,
'database' => 0,
];
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Pas het juiste configuratiegedeelte aan, afhankelijk van welke cachingsoftware je in ServBay hebt ingeschakeld.
Webserver instellen (ServBay Websitetoewijzing)
Gebruik de Websites functie van ServBay om de webserver te configureren en te linken aan je CodeIgniter-project.
- Open de ServBay applicatie-interface.
- Navigeer naar het tabblad Websites (Websites).
- Klik linksonder op de knop
+
om een nieuwe website toe te voegen. - Vul de websitegegevens in:
- Naam (Name): Bijvoorbeeld
Mijn eerste CodeIgniter Dev Site
. - Domein (Domain): Bedenk een domeinnaam om lokaal te gebruiken, bijvoorbeeld
servbay-codeigniter-test.local
. ServBay koppelt automatisch.local
-domeinen aan je machine. - Site type (Site Type): Kies
PHP
. - PHP-versie (PHP Version): Selecteer de PHP-versie naar wens, bijvoorbeeld
8.3
. - Document root (Website root): Belangrijk: het entrypoint (
index.php
) van CodeIgniter zit in de mappublic
binnen je project. Stel root pad dus in op depublic
-map van je project:/Applications/ServBay/www/servbay-codeigniter-app/public
.
- Naam (Name): Bijvoorbeeld
- Klik op Add om op te slaan.
- Mogelijk vraagt ServBay om wijzigingen toe te passen — klik op bevestigen.
Zie voor meer details: Eerste website toevoegen.
Voorbeeldcode toevoegen
Om te controleren of je project goed werkt en database/cache-integratie te testen, pas je de standaard Home
controller aan met wat voorbeeldmethoden.
Open app/Controllers/Home.php
en vervang de inhoud door de volgende code:
php
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
use CodeIgniter\Database\Exceptions\DatabaseException; // Database exception klasse importeren
use CodeIgniter\Cache\Exceptions\CacheException; // Cache exception klasse importeren
class Home extends Controller
{
/**
* Standaard homepage-methode
*/
public function index(): string
{
// Welkomstbericht teruggeven
return '<h1>Hello ServBay and CodeIgniter!</h1><p>Your CodeIgniter project is running on ServBay.</p>';
}
/**
* Memcached voorbeeldmethode
*/
public function memcached(): string
{
try {
$cache = \Config\Services::cache();
// Probeer gegevens op te slaan in de cache
$success = $cache->save('servbay_memcached_key', 'Hello Memcached from CodeIgniter!', 60); // 60 seconden cachen
if (!$success) {
return 'Error: Failed to save data to Memcached. Check Memcached service and configuration.';
}
// Probeer gegevens op te halen uit de 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) {
// Cachegerelateerde exceptions afhandelen
return 'Cache Error: ' . $e->getMessage() . '. Ensure Memcached service is running and configured correctly.';
} catch (\Exception $e) {
// Andere mogelijke fouten afhandelen
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Redis voorbeeldmethode
*/
public function redis(): string
{
try {
$cache = \Config\Services::cache();
// Gegevens in Redis cache opslaan
$success = $cache->save('servbay_redis_key', 'Hello Redis from CodeIgniter!', 60); // 60 seconden cachen
if (!$success) {
return 'Error: Failed to save data to Redis. Check Redis service and configuration.';
}
// Gegevens terughalen uit de 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) {
// Cachegerelateerde exceptions afhandelen
return 'Cache Error: ' . $e->getMessage() . '. Ensure Redis service is running and configured correctly.';
} catch (\Exception $e) {
// Andere mogelijke fouten afhandelen
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Gebruikersgegevens opslaan in database (MySQL/PostgreSQL)
*/
public function addUser(): string
{
try {
$db = \Config\Database::connect();
// Check of de 'users' tabel bestaat (eenvoudige check)
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Voeg gebruiker toe
$data = [
'name' => 'ServBay Demo User',
'email' => 'user_' . time() . '@servbay.demo', // Uniek emailadres genereren met time()
];
$db->table('users')->insert($data);
// Optioneel: check of de invoeging is gelukt
// if ($db->affectedRows() > 0) {
return 'User added successfully: ' . $data['email'];
// } else {
// return 'Error: Failed to add user.';
// }
} catch (DatabaseException $e) {
// Database-excepties afhandelen
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Andere mogelijke fouten afhandelen
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Gebruikersgegevens uit de database ophalen (MySQL/PostgreSQL)
*/
public function listUsers(): string
{
try {
$db = \Config\Database::connect();
// Check of de 'users' tabel bestaat
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Haal alle gebruikers op
$users = $db->table('users')->get()->getResult();
if (empty($users)) {
return 'No users found in the database.';
}
// Geef gebruikerslijst terug als JSON
return json_encode($users);
} catch (DatabaseException $e) {
// Database-excepties afhandelen
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Andere mogelijke fouten afhandelen
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
Deze bijgewerkte controller geeft duidelijke output en basisfoutafhandeling voor eenvoudige probleemdiagnose.
Routes configureren
Om de zojuist toegevoegde methoden in de Home
controller via de browser te kunnen bezoeken, voeg je nieuwe routes toe aan het routebestand van CodeIgniter.
Open app/Config/Routes.php
. Zoek het deel met de $routes
-definities en voeg daar de volgende regels toe:
php
// ... overige routes ...
// Memcached demo-route
$routes->get('/memcached', 'Home::memcached');
// Redis demo-route
$routes->get('/redis', 'Home::redis');
// Database demo-routes
$routes->get('/add-user', 'Home::addUser');
$routes->get('/list-users', 'Home::listUsers');
// ... overige 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
Voeg deze nieuwe routes toe binnen de bestaande $routes
-definities zonder bestaande routes te overschrijven.
De website bezoeken
Je CodeIgniter-project draait nu op ServBay en is klaar om getest te worden. Open een webbrowser en ga naar je ingestelde domein:
Homepagina bezoeken:
https://servbay-codeigniter-test.local
Je zou een pagina moeten zien met de tekstHello ServBay and CodeIgniter!
, wat betekent dat je project correct draait via de webserver van ServBay.Memcached-demo testen:
https://servbay-codeigniter-test.local/memcached
Als Memcached werkt en goed is ingesteld, zie je de meldingMemcached Test Success: Hello Memcached from CodeIgniter!
.Redis-demo testen:
https://servbay-codeigniter-test.local/redis
Werkt Redis goed, dan verschijntRedis Test Success: Hello Redis from CodeIgniter!
.
Databasevoorbeeld (MySQL/PostgreSQL)
Voor je de database-methoden gebruikt, moet je met CodeIgniter's migratiecommando's eerst de tabel users
aanmaken.
Database aanmaken (Migraties uitvoeren)
Open Terminal en navigeer naar je projectmap:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Migration-bestand aanmaken: Maak een migration aan voor de tabelstructuur van
users
:bashphp spark make:migration create_users_table
1Je vindt het gegenereerde bestand in
app/Database/Migrations
.Migration-bestand aanpassen: Open het bestand dat op
YYYY-MM-DD-HHMMSS_CreateUsersTable.php
lijkt en bewerk deup()
-methode om de kolommen en indexen van de tabel in te stellen. Let op: MySQL en PostgreSQL hanteren verschillende syntaxis voor automatische timestampvelden (CURRENT_TIMESTAMP
vs.NOW()
). CodeIgniter'sRawSql
helpt hierbij. Bijvoorbeeld:php<?php namespace App\Database\Migrations; use CodeIgniter\Database\Migration; use CodeIgniter\Database\RawSql; // RawSql klasse importeren 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, // Emailveld moet uniek zijn ], 'created_at' => [ 'type' => 'TIMESTAMP', // Gebruik geschikte default afhankelijk van het databaseplatform // MySQL: 'default' => new RawSql('CURRENT_TIMESTAMP'), // PostgreSQL: 'default' => new RawSql('NOW()'), 'default' => new RawSql($this->db->getPlatform() === 'MySQLi' ? 'CURRENT_TIMESTAMP' : 'NOW()'), // Dynamische keuze ], '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()'), // Dynamisch ], ]); $this->forge->addKey('id', true); // id is primaire sleutel $this->forge->createTable('users'); // Maak de users-tabel aan } public function down() { // Draai migratie terug: users-tabel verwijderen $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
51Let op: In dit voorbeeld wordt op eenvoudige wijze gekozen voor de juiste timestamp default per database. In grotere projecten is een uitgebreidere migratiestrategie mogelijk beter, of kun je verschillende migraties voor verschillende engines overwegen.
Migratie uitvoeren: Run in Terminal het volgende commando om de migratie uit te voeren en de users-tabel aan te maken:
bashphp spark migrate
1Als dit slaagt, zie je een melding in Terminal. Je kunt ook in ServBay via Adminer controleren of de tabel
users
is aangemaakt in de databaseservbay_codeigniter_app
.
Database-demo's uitvoeren
Controleer dat je databaseverbinding juist is ingesteld in app/Config/Database.php
en dat de migratie de users
-tabel heeft aangemaakt.
Voeg een gebruiker toe aan de database: Bezoek
https://servbay-codeigniter-test.local/add-user
Elke keer dat je deze URL laadt, wordt er een nieuwe gebruiker toegevoegd aan de tabel. Je krijgt een melding alsUser added successfully: [email protected]
.Lijst alle gebruikers in de database: Bezoek
https://servbay-codeigniter-test.local/list-users
Deze URL haalt alle records uit deusers
-tabel op en toont ze in JSON-formaat.
Samenvatting
Met bovenstaande stappen heb je succesvol een CodeIgniter-project aangemaakt, geconfigureerd en gestart in de ServBay-omgeving op macOS. Je hebt geleerd hoe je met Composer een project opzet, de Websites-functie van ServBay gebruikt om het juiste pad in te stellen, CodeIgniter configureert voor database- en cache-integratie, en met praktijkvoorbeelden deze integratie test. Dankzij ServBay wordt het opzetten en beheren van je lokale ontwikkelomgeving een fluitje van een cent, zodat jij je kunt richten op de ontwikkeling van je CodeIgniter-applicatie.