Een CodeIgniter-project maken en uitvoeren
Wat is CodeIgniter?
CodeIgniter is een lichtgewicht en uiterst snel PHP-webframework. Het volgt het Model-View-Controller (MVC) ontwerpprincipe en helpt ontwikkelaars razendsnel krachtige webapplicaties te bouwen. Dankzij de overzichtelijke structuur, uitmuntende performance en het intuïtieve karakter is CodeIgniter een favoriete keuze voor veel PHP-ontwikkelaars.
Belangrijkste kenmerken en voordelen van CodeIgniter
- Lichtgewicht kern: CodeIgniter bevat alleen de essentiële componenten die nodig zijn om te draaien, wat resulteert in supersnelle laadtijden.
- Uitstekende performance: Het framework is ontworpen voor efficiëntie en kan hoge aantallen gelijktijdige verzoeken verwerken.
- Gemakkelijk te leren: Heldere documentatie en een intuïtieve API zorgen ervoor dat je snel aan de slag kunt.
- Grote flexibiliteit: Je kunt eenvoudig externe bibliotheken integreren en het framework aanpassen aan je projectbehoeften.
- Actieve community: Een omvangrijke en actieve community levert veel resources en ondersteuning.
CodeIgniter is geschikt voor zowel kleine als grote bedrijfstoepassingen en helpt ontwikkelaars efficiënt hoogwaardige weboplossingen te bouwen.
Een CodeIgniter-ontwikkelomgeving opzetten met ServBay
ServBay is een lokale webontwikkeltool voor macOS en Windows. Het integreert PHP, databases (MySQL, PostgreSQL, MongoDB), caching (Redis, Memcached), webservers (Caddy, Nginx, Apache) en meer, met een handige beheerinterface. Dankzij ServBay kun je snel en eenvoudig de noodzakelijke ontwikkelomgeving voor CodeIgniter opzetten en beheren.
Dit artikel laat zien hoe je ServBay gebruikt om een CodeIgniter-project te maken, configureren en uitvoeren, en hoe je verschillende database- en cachingdiensten integreert.
Vereisten
Zorg ervoor dat je het volgende hebt geregeld:
- ServBay is geïnstalleerd en actief op macOS of Windows.
- De gewenste PHP-versie (bijvoorbeeld PHP 8.3) staat aan in ServBay.
- De database- en cachingpakketten die je wilt gebruiken (zoals MySQL, PostgreSQL, Redis, Memcached) zijn actief in ServBay.
Een CodeIgniter-project aanmaken
Het wordt aanbevolen om je webprojecten in het volgende ServBay-mapje te plaatsen, zodat ServBay deze eenvoudig kan beheren:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Composer installeren
ServBay wordt geleverd met Composer, dus je hoeft deze doorgaans niet handmatig te installeren. Gebruik gewoon het
composer
-commando in de terminal.Ga naar de webroot-map
Open een terminal en verander naar de aanbevolen webroot:
macOS:
bashcd /Applications/ServBay/www
1Windows:
cmdcd C:\ServBay\www
1Maak een nieuw CodeIgniter-project
Met Composer maak je een CodeIgniter 4-project. Noem je projectmap bijvoorbeeld
servbay-codeigniter-app
:bashcomposer create-project codeigniter4/appstarter servbay-codeigniter-app
1Composer downloadt de CodeIgniter-basis en afhankelijkheden naar de map
servbay-codeigniter-app
.Ga naar je projectmap
Navigeer naar de nieuwe CodeIgniter-projectmap:
macOS:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Windows:
cmdcd C:\ServBay\www\servbay-codeigniter-app
1
Initialisatie & configuratie
Databaseverbinding instellen
De databaseconfiguratie van CodeIgniter vind je in het bestand app/Config/Database.php
. Voordat je de database gebruikt, moet je hier de verbindingsgegevens instellen.
Maak eerst via ServBay's databasebeheer (zoals Adminer of phpMyAdmin, te openen vanuit ServBay) een nieuwe database aan, bijvoorbeeld servbay_codeigniter_app
.
Open vervolgens app/Config/Database.php
, zoek het $default
-array en vul de connectiedetails in op basis van de database die je via ServBay gebruikt (zoals MySQL of PostgreSQL). De standaard gebruikersnaam en wachtwoord in ServBay zijn vaak root
en password
.
Hier is een voorbeeldconfiguratie voor MySQL:
php
public $default = [
'DSN' => '',
'hostname' => '127.0.0.1', // ServBay-databases draaien standaard op 127.0.0.1
'username' => 'root', // ServBay standaard gebruikersnaam
'password' => 'password', // ServBay standaard wachtwoord
'database' => 'servbay_codeigniter_app', // Jouw database
'DBDriver' => 'MySQLi', // 'MySQLi' of 'Pdo' bij 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
Gebruik je PostgreSQL, zet dan DBDriver
op 'Postgre'
, gebruik doorgaans poort 5432
, en pas eventueel de karakterset-instellingen aan.
Caching koppelen (Memcached/Redis)
Wil je Memcached of Redis als cache gebruiken, dan stel je dit in het bestand app/Config/Cache.php
in.
Bewerk het bestand app/Config/Cache.php
en zoek de juiste configuratie. Memcached draait standaard op poort 11211
, Redis op poort 6379
, meestal zonder wachtwoord.
Voorbeeldconfiguratie Memcached:
php
public $memcached = [
'host' => '127.0.0.1', // Memcached op 127.0.0.1
'port' => 11211, // Standaard poort
'weight' => 1,
];
1
2
3
4
5
2
3
4
5
Voorbeeldconfiguratie Redis:
php
public string $handler = 'redis'; // Zet standaard caching op Redis
public $default = [ // Redis-configuratie meestal in default-array
'host' => '127.0.0.1', // Redis op 127.0.0.1
'password' => null, // Standaard geen wachtwoord
'port' => 6379, // Standaard poort
'timeout' => 0,
'database' => 0,
];
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Stel de configuratie in op basis van de actieve cachingpakketten in ServBay.
Webserver instellen (ServBay Websites)
Gebruik in ServBay de Websites-functie om je webserver in te stellen en te linken met het CodeIgniter-project.
- Open de ServBay-interface.
- Ga naar het tabblad Websites.
- Klik linksonder op de
+
om een nieuwe website toe te voegen. - Vul de sitegegevens in:
- Naam: Kies een herkenbare naam, zoals
My First CodeIgniter Dev Site
. - Domein: Vul het (lokale) domein in, bijvoorbeeld
servbay-codeigniter-test.local
. ServBay koppelt.local
-domeinen automatisch aan je machine. - Site Type: Kies
PHP
. - PHP-versie: Selecteer de gewenste PHP-versie, bijvoorbeeld
8.3
. - Document Root: Dit is belangrijk: het CodeIgniter-toegangsbestand (
index.php
) staat in de mappublic
van je project. Stel de root in op de mappublic
in je project:/Applications/ServBay/www/servbay-codeigniter-app/public
.
- Naam: Kies een herkenbare naam, zoals
- Klik op Add om de website op te slaan.
- Mogelijk vraagt ServBay om de wijzigingen te bevestigen; klik op bevestigen.
Zie Eerste website toevoegen voor een gedetailleerde uitleg.
Voorbeeldcode toevoegen
Om te testen of alles werkt en je database/databasecacheverbindingen werken, pas je de standaard Home
controller van CodeIgniter aan met voorbeeldmethodes.
Bewerk het bestand app/Controllers/Home.php
en vervang de inhoud met deze code:
php
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
use CodeIgniter\Database\Exceptions\DatabaseException; // Database-excepties importeren
use CodeIgniter\Cache\Exceptions\CacheException; // Cache-excepties importeren
class Home extends Controller
{
/**
* Standaard homepage methode
*/
public function index(): string
{
// Geeft een eenvoudige welkomstmelding terug
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 cache te schrijven
$success = $cache->save('servbay_memcached_key', 'Hello Memcached from CodeIgniter!', 60); // 60 seconden cache
if (!$success) {
return 'Error: Failed to save data to Memcached. Check Memcached service and configuration.';
}
// Probeer cache te lezen
$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) {
// Vang cachegerelateerde fouten af
return 'Cache Error: ' . $e->getMessage() . '. Ensure Memcached service is running and configured correctly.';
} catch (\Exception $e) {
// Vang andere mogelijke fouten af
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Redis voorbeeldmethode
*/
public function redis(): string
{
try {
$cache = \Config\Services::cache();
// Probeer cache te schrijven
$success = $cache->save('servbay_redis_key', 'Hello Redis from CodeIgniter!', 60); // 60 seconden cache
if (!$success) {
return 'Error: Failed to save data to Redis. Check Redis service and configuration.';
}
// Probeer cache te lezen
$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) {
// Vang cachegerelateerde fouten af
return 'Cache Error: ' . $e->getMessage() . '. Ensure Redis service is running and configured correctly.';
} catch (\Exception $e) {
// Vang andere mogelijke fouten af
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Gebruikersdata schrijven naar database (MySQL/PostgreSQL)
*/
public function addUser(): string
{
try {
$db = \Config\Database::connect();
// Controleer of 'users' tabel bestaat (simpele 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 maken
];
$db->table('users')->insert($data);
// Controleer indien gewenst of de insert gelukt is
// if ($db->affectedRows() > 0) {
return 'User added successfully: ' . $data['email'];
// } else {
// return 'Error: Failed to add user.';
// }
} catch (DatabaseException $e) {
// Vang databasefouten af
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Vang overige fouten af
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Gebruikersdata ophalen uit database (MySQL/PostgreSQL)
*/
public function listUsers(): string
{
try {
$db = \Config\Database::connect();
// Controleer of '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 in JSON-formaat
return json_encode($users);
} catch (DatabaseException $e) {
// Vang databasefouten af
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Vang overige fouten af
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 biedt duidelijke output en basisfoutafhandeling om problemen beter te kunnen diagnosticeren.
Routing instellen
Om je voorbeeldmethodes uit de Home
controller via URL te kunnen oproepen, voeg je nieuwe routes toe aan CodeIgniter.
Bewerk app/Config/Routes.php
, zoek het deel met $routes
en voeg dit toe:
php
// ... overige routes ...
// Memcached voorbeeldroute
$routes->get('/memcached', 'Home::memcached');
// Redis voorbeeldroute
$routes->get('/redis', 'Home::redis');
// Database-voorbeeldroutes
$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
Zorg dat je deze routes aan het bestaande $routes
-gedeelte toevoegt en niet overschrijft.
Website bezoeken
Je CodeIgniter-project draait nu lokaal via ServBay. Open je browser en bezoek het ingestelde domein:
Homepage bekijken:
https://servbay-codeigniter-test.local
Je ziet de meldingHello ServBay and CodeIgniter!
, wat aangeeft dat het project succesvol draait via ServBay.Memcached testen:
https://servbay-codeigniter-test.local/memcached
Als Memcached correct werkt, krijg je bijvoorbeeldMemcached Test Success: Hello Memcached from CodeIgniter!
te zien.Redis testen:
https://servbay-codeigniter-test.local/redis
Als Redis correct werkt, krijg je bijvoorbeeldRedis Test Success: Hello Redis from CodeIgniter!
te zien.
Voorbeelden databasehandeling (MySQL/PostgreSQL)
Voor je de databasevoorbeelden gebruikt, moet je een migratie uitvoeren om de users
-tabel aan te maken.
Tabellen maken (migratie uitvoeren)
Open de terminal en ga naar je projectmap:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Maak een migratiebestand: Gebruik de CodeIgniter CLI om een migratie aan te maken voor de
users
-tabel:bashphp spark make:migration create_users_table
1Er wordt nu een PHP-bestand aangemaakt in
app/Database/Migrations
.Bewerk het migratiebestand: Open het vers aangemaakte bestand (bijvoorbeeld
YYYY-MM-DD-HHMMSS_CreateUsersTable.php
) en definieer de kolommen en indices van de tabel in deup()
-methode. MySQL en PostgreSQL verschillen iets qua standaardwaarden voor timestamps (CURRENT_TIMESTAMP
versusNOW()
). CodeIgnitersRawSql
helpt je hierbij:php<?php namespace App\Database\Migrations; use CodeIgniter\Database\Migration; use CodeIgniter\Database\RawSql; // RawSql 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, // Unieke email ], 'created_at' => [ 'type' => 'TIMESTAMP', // Kies de juiste standaardwaarde per database // MySQL: 'default' => new RawSql('CURRENT_TIMESTAMP'), // PostgreSQL: 'default' => new RawSql('NOW()'), 'default' => new RawSql($this->db->getPlatform() === 'MySQLi' ? 'CURRENT_TIMESTAMP' : 'NOW()'), // Automatisch kiezen ], '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()'), // Automatisch kiezen ], ]); $this->forge->addKey('id', true); // id als primaire sleutel $this->forge->createTable('users'); // Tabel aanmaken } public function down() { // Terugdraaien: 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: Het bovenstaande voorbeeld gebruikt eenvoudige logic om de timestamp-syntax voor de juiste database te kiezen. In complexe projecten kun je overwegen verschillende migratiebestanden te hanteren per database.
Migratie uitvoeren: Voer in de terminal het migratiecommando uit om de
users
-tabel te maken:bashphp spark migrate
1Na succesvolle migratie zie je een melding in de terminal en kun je controleren via ServBay’s databasebeheer (zoals Adminer) of de tabel aanwezig is in
servbay_codeigniter_app
.
Databasevoorbeeld gebruiken
Controleer dat je de juiste databasegegevens hebt ingevuld in app/Config/Database.php
en dat de tabel bestaat via migratie.
Gebruiker toevoegen: Bezoek
https://servbay-codeigniter-test.local/add-user
Bij elke oproep wordt een nieuwe gebruiker toegevoegd aan de tabel. Je ziet een melding zoalsUser added successfully: user_XXXXXXXXXX@servbay.demo
.Gebruikerslijst ophalen: Bezoek
https://servbay-codeigniter-test.local/list-users
Je krijgt nu alle gebruikers uit de database in JSON-formaat te zien.
Samenvatting
Met deze stappen heb je in de ServBay-omgeving op macOS een CodeIgniter-project gemaakt, geconfigureerd en gestart. Je hebt geleerd hoe je met Composer een project aanmaakt, ServBay-websites instelt op de juiste directory, database- en cacheconnecties configureert in CodeIgniter, en via voorbeeldcode de werking test. ServBay maakt het opzetten en beheren van je lokale ontwikkelomgeving eenvoudig, zodat jij je kunt richten op de ontwikkeling van je CodeIgniter-applicatie.