Erstellen und Ausführen eines CodeIgniter-Projekts
Was ist CodeIgniter?
CodeIgniter ist ein leichtgewichtiges und leistungsstarkes PHP-Webframework, das den Model-View-Controller (MVC) Design-Ansatz verfolgt. Es unterstützt Entwickler dabei, funktionsreiche Webanwendungen schnell zu erstellen. Dank seiner klaren Struktur, exzellenten Performance und einfachen Erlernbarkeit zählt CodeIgniter zu den bevorzugten Frameworks vieler PHP-Entwickler.
Hauptmerkmale und Vorteile von CodeIgniter
- Kompakter Kern: Das CodeIgniter-Kernsystem ist schlank und enthält nur die notwendigen Komponenten für den Betrieb, was zu sehr schnellen Ladezeiten führt.
- Hervorragende Performance: Die Architektur ist auf Effizienz ausgerichtet und ermöglicht die Verarbeitung von hohem Traffic und bietet ausgezeichnete Anwendungsleistungen.
- Einfache Einstieg: Klar strukturierte Dokumentation und eine intuitive API sorgen für schnelle Lernfortschritte und einfache Nutzung.
- Hohe Flexibilität: Sie können problemlos Drittanbieter-Bibliotheken integrieren und Funktionen nach Bedarf erweitern und anpassen.
- Aktive Community: Ein großes, aktives Entwicklerforum bietet wertvolle Ressourcen und Unterstützung.
CodeIgniter eignet sich für Projekte jeder Größe – von kleinen Anwendungen bis zu komplexen Unternehmenslösungen – und unterstützt Entwickler dabei, hochwertige Webprojekte effizient umzusetzen.
Einrichten der CodeIgniter-Entwicklungsumgebung mit ServBay
ServBay ist ein speziell für macOS und Windows entwickelte lokale Web-Entwicklungsumgebung, die PHP, Datenbanken (MySQL, PostgreSQL, MongoDB), Caching-Dienste (Redis, Memcached), Webserver (Caddy, Nginx, Apache) und vieles mehr integriert und eine komfortable Verwaltung per grafischer Oberfläche bietet. So lässt sich die für CodeIgniter benötigte Umgebung einfach und intuitiv einrichten und verwalten.
In dieser Anleitung erfahren Sie Schritt für Schritt, wie Sie mit ServBay und dessen PHP-Umgebung sowie der Websites-Funktion ein CodeIgniter-Projekt aufsetzen, konfigurieren und ausführen sowie verschiedene Datenbanken und Caching-Dienste integrieren.
Voraussetzungen
Bitte stellen Sie vorab sicher, dass Sie folgende Punkte erledigt haben:
- ServBay ist erfolgreich auf Ihrem macOS- oder Windows-System installiert und ausgeführt.
- Die gewünschte PHP-Version (z. B. PHP 8.3) ist in ServBay aktiviert.
- Die benötigten Datenbank- und Cache-Pakete (z. B. MySQL, PostgreSQL, Redis, Memcached) sind in ServBay aktiviert.
Erstellen des CodeIgniter-Projekts
ServBay empfiehlt, Ihre Website-Projekte einheitlich in folgendem Verzeichnis zu speichern. Dadurch können lokale Websites optimal verwaltet werden:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Composer installieren
Composer ist in ServBay bereits vorinstalliert und kann direkt im Terminal genutzt werden.
Wechseln Sie ins Website-Stammverzeichnis
Öffnen Sie das Terminal und wechseln Sie ins empfohlenen web root:
macOS:
bashcd /Applications/ServBay/www
1Windows:
cmdcd C:\ServBay\www
1Erstellen Sie das CodeIgniter-Projekt
Mit Composer erstellen Sie ein neues CodeIgniter 4 Projekt, z. B. mit dem Verzeichnisnamen
servbay-codeigniter-app
:bashcomposer create-project codeigniter4/appstarter servbay-codeigniter-app
1Composer lädt die CodeIgniter-Projektstruktur und alle notwendigen Abhängigkeiten ins Verzeichnis
servbay-codeigniter-app
.Wechseln Sie ins Projektverzeichnis
Wechseln Sie in das neu erstellte Projektverzeichnis:
macOS:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Windows:
cmdcd C:\ServBay\www\servbay-codeigniter-app
1
Initiale Konfiguration
Datenbankverbindung konfigurieren
Die Einstellungen der CodeIgniter-Datenbank befinden sich in der Datei app/Config/Database.php
. Vor der Nutzung der Datenbank müssen Sie dort die richtigen Verbindungsdaten hinterlegen.
Wenn Sie eine Datenbank nutzen möchten, legen Sie zuvor mit ServBays Datenbank-Administrationstools (wie Adminer oder phpMyAdmin, erreichbar über die ServBay-Oberfläche) eine Datenbank mit dem Namen servbay_codeigniter_app
an.
Öffnen Sie dann app/Config/Database.php
, suchen Sie das Array $default
und passen Sie die Zugangsdaten gemäß des von Ihnen eingerichteten Datenbanktyps (z. B. MySQL oder PostgreSQL) an. Die Standard-Zugangsdaten bei ServBay sind in der Regel root
und password
.
Beispiel für eine MySQL-Konfiguration:
php
public $default = [
'DSN' => '',
'hostname' => '127.0.0.1', // ServBay-Datenbank läuft üblicherweise auf 127.0.0.1
'username' => 'root', // Standard-Benutzername
'password' => 'password', // Standard-Passwort
'database' => 'servbay_codeigniter_app', // von Ihnen angelegte Datenbank
'DBDriver' => 'MySQLi', // je nach Datenbank, z. B. MySQLi oder Pdo für MySQL
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'charset' => 'utf8mb4',
'DBCollat' => 'utf8mb4_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306, // Standardport für MySQL
];
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
Wenn Sie PostgreSQL verwenden, setzen Sie DBDriver
auf 'Postgre'
und den Port üblicherweise auf 5432
. Die Einstellungen für das Encoding müssen eventuell angepasst werden.
Cacheverbindung konfigurieren (Memcached/Redis)
Falls Sie Memcached oder Redis als Cache verwenden möchten, konfigurieren Sie dies in der Datei app/Config/Cache.php
.
Bearbeiten Sie app/Config/Cache.php
und suchen Sie die jeweiligen Abschnitte. ServBay lauscht auf Memcached Standard-Port 11211
und bei Redis auf 6379
– ein Passwort ist meistens nicht erforderlich.
Beispiel für Memcached:
php
public $memcached = [
'host' => '127.0.0.1', // ServBay Memcached läuft auf 127.0.0.1
'port' => 11211, // Standardport für Memcached
'weight' => 1,
];
1
2
3
4
5
2
3
4
5
Beispiel für Redis:
php
public string $handler = 'redis'; // Setzt Redis als Standard Cache Handler
public $default = [ // Redis-Konfiguration im default-Array
'host' => '127.0.0.1', // ServBay Redis läuft auf 127.0.0.1
'password' => null, // Standardmäßig kein Passwort
'port' => 6379, // Standardport für Redis
'timeout' => 0,
'database' => 0,
];
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Stellen Sie sicher, dass die Konfiguration zu den aktivierten Cache-Paketen passt.
Webserver konfigurieren (ServBay Website-Einstellungen)
Mit der ServBay-Websites-Funktion richten Sie den Webserver so ein, dass er auf Ihr CodeIgniter-Projekt zeigt.
- Öffnen Sie die ServBay-Oberfläche.
- Navigieren Sie zum Register Websites.
- Klicken Sie unten links auf das
+
-Symbol, um eine neue Website hinzuzufügen. - Tragen Sie folgende Daten ein:
- Name: Vergeben Sie einen eindeutigen Namen – z. B.
My First CodeIgniter Dev Site
. - Domain: Die gewünschte lokale Domain, z. B.
servbay-codeigniter-test.local
. ServBay leitet.local
automatisch korrekt weiter. - Website-Typ: Wählen Sie
PHP
. - PHP-Version: Setzen Sie Ihre gewünschte Version, z. B.
8.3
. - Document Root: Ganz wichtig – das CodeIgniter-Einstiegsfile (
index.php
) befindet sich impublic
-Verzeichnis Ihres Projekts. Setzen Sie daher als Webroot unbedingt daspublic
-Verzeichnis Ihres Projekts:/Applications/ServBay/www/servbay-codeigniter-app/public
.
- Name: Vergeben Sie einen eindeutigen Namen – z. B.
- Speichern Sie die Einstellungen mit Add.
- ServBay fordert eventuell zum Übernehmen der Änderungen auf – bestätigen Sie dies.
Für eine detaillierte Anleitung siehe Erstellung der ersten Website.
Beispielcode hinzufügen
Um die korrekte Funktion des Projekts und die Einbindung von Datenbank und Cache zu prüfen, passen wir den Standard-Home
-Controller von CodeIgniter an und ergänzen Beispielmethoden.
Öffnen Sie die Datei app/Controllers/Home.php
und ersetzen Sie den Inhalt durch:
php
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
use CodeIgniter\Database\Exceptions\DatabaseException; // Datenbank-Ausnahme-Klasse importieren
use CodeIgniter\Cache\Exceptions\CacheException; // Cache-Ausnahme-Klasse importieren
class Home extends Controller
{
/**
* Standard-Homepage-Methode
*/
public function index(): string
{
// Gibt eine einfache Willkommensnachricht zurück
return '<h1>Hello ServBay and CodeIgniter!</h1><p>Your CodeIgniter project is running on ServBay.</p>';
}
/**
* Memcached-Beispielmethode
*/
public function memcached(): string
{
try {
$cache = \Config\Services::cache();
// Versuch, einen Wert im Cache zu speichern
$success = $cache->save('servbay_memcached_key', 'Hello Memcached from CodeIgniter!', 60); // Cache für 60 Sekunden
if (!$success) {
return 'Error: Failed to save data to Memcached. Check Memcached service and configuration.';
}
// Versuch, Wert aus dem Cache zu lesen
$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) {
// Cache-bezogene Ausnahmen behandeln
return 'Cache Error: ' . $e->getMessage() . '. Ensure Memcached service is running and configured correctly.';
} catch (\Exception $e) {
// Andere Fehler abfangen
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Redis-Beispielmethode
*/
public function redis(): string
{
try {
$cache = \Config\Services::cache();
// Versuch, einen Wert zu speichern
$success = $cache->save('servbay_redis_key', 'Hello Redis from CodeIgniter!', 60); // Cache für 60 Sekunden
if (!$success) {
return 'Error: Failed to save data to Redis. Check Redis service and configuration.';
}
// Wert aus Redis lesen
$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) {
// Cache-bezogene Ausnahmen behandeln
return 'Cache Error: ' . $e->getMessage() . '. Ensure Redis service is running and configured correctly.';
} catch (\Exception $e) {
// Weitere Fehler abfangen
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Benutzerdaten in die Datenbank schreiben (MySQL/PostgreSQL)
*/
public function addUser(): string
{
try {
$db = \Config\Database::connect();
// Prüfen, ob die 'users'-Tabelle existiert (als einfache Vorsichtsmaßnahme)
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Daten einfügen
$data = [
'name' => 'ServBay Demo User',
'email' => 'user_' . time() . '@servbay.demo', // mit time() eindeutige E-Mail erzeugen
];
$db->table('users')->insert($data);
// Optional: prüfen, ob Einfügen erfolgreich war (insert() gibt in der Regel true zurück)
// if ($db->affectedRows() > 0) {
return 'User added successfully: ' . $data['email'];
// } else {
// return 'Error: Failed to add user.';
// }
} catch (DatabaseException $e) {
// Datenbank-bezogene Fehler behandeln
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Weitere Fehler abfangen
return 'An unexpected error occurred: ' . $e->getMessage();
}
}
/**
* Benutzerdaten aus der Datenbank lesen (MySQL/PostgreSQL)
*/
public function listUsers(): string
{
try {
$db = \Config\Database::connect();
// Prüfen, ob die 'users'-Tabelle existiert
if (!$db->tableExists('users')) {
return 'Error: "users" table does not exist. Please run database migrations first.';
}
// Alle Nutzer abfragen
$users = $db->table('users')->get()->getResult();
if (empty($users)) {
return 'No users found in the database.';
}
// Nutzerliste als JSON ausgeben
return json_encode($users);
} catch (DatabaseException $e) {
// Datenbank-spezifische Fehler behandeln
return 'Database Error: ' . $e->getMessage() . '. Check database connection and table structure.';
} catch (\Exception $e) {
// Weitere Fehler abfangen
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
Der Controller liefert übersichtliche Rückgaben und grundlegende Fehlerdiagnose.
Routing konfigurieren
Damit Sie die neuen Beispielmethoden im Home
-Controller per URL erreichen, fügen Sie entsprechende Routings in der Datei app/Config/Routes.php
hinzu.
Bearbeiten Sie app/Config/Routes.php
, suchen Sie die Definition von $routes
und ergänzen Sie folgende Routen:
php
// ... weitere Routing-Regeln ...
// Memcached-Beispiel
$routes->get('/memcached', 'Home::memcached');
// Redis-Beispiel
$routes->get('/redis', 'Home::redis');
// Datenbank-Beispiel
$routes->get('/add-user', 'Home::addUser');
$routes->get('/list-users', 'Home::listUsers');
// ... weitere Routing-Regeln ...
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
Achten Sie darauf, die neuen Routen in die bestehende Definition einzufügen und nichts zu überschreiben.
Website aufrufen
Ihr CodeIgniter-Projekt ist jetzt eingerichtet und in ServBay aktiv. Öffnen Sie Ihren Browser und besuchen Sie Ihre konfigurierte Domain:
Startseite:
https://servbay-codeigniter-test.local
Sie sollten eine Seite mit der AusgabeHello ServBay and CodeIgniter!
sehen – dies zeigt, dass Ihr Projekt korrekt über ServBay läuft.Memcached-Beispiel:
https://servbay-codeigniter-test.local/memcached
Wenn Memcached richtig konfiguriert und gestartet ist, erscheint eine Meldung wieMemcached Test Success: Hello Memcached from CodeIgniter!
.Redis-Beispiel:
https://servbay-codeigniter-test.local/redis
Wenn Redis gestartet ist und korrekt eingerichtet wurde, erhalten Sie eine Ausgabe wieRedis Test Success: Hello Redis from CodeIgniter!
.
Datenbankbeispiele (MySQL/PostgreSQL)
Vor der Nutzung von Datenbankfunktionen müssen Sie die CodeIgniter-Migration ausführen, um die Tabelle users
zu erstellen.
Datenbankstruktur anlegen (Migration ausführen)
Öffnen Sie das Terminal und wechseln Sie ins Projektverzeichnis:
bashcd /Applications/ServBay/www/servbay-codeigniter-app
1Migration-Datei erstellen: Mit CodeIgniters CLI-Tool legen Sie eine Migration an, die die
users
-Tabelle definiert:bashphp spark make:migration create_users_table
1Im Ordner
app/Database/Migrations
erscheint eine neue PHP-Datei.Migration bearbeiten: Öffnen Sie die neu angelegte Datei (Name etwa wie
YYYY-MM-DD-HHMMSS_CreateUsersTable.php
) und passen Sie die Methodeup()
an, um die Felder und Indizes derusers
-Tabelle festzulegen. MySQL und PostgreSQL unterscheiden sich geringfügig bei den Default-Werten für Zeitstempel (CURRENT_TIMESTAMP
vs.NOW()
). Mit CodeIgnitersRawSql
lässt sich dies flexibel steuern. Hier ein Beispiel:php<?php namespace App\Database\Migrations; use CodeIgniter\Database\Migration; use CodeIgniter\Database\RawSql; // RawSql-Klasse importieren 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, // E-Mail-Feld als eindeutig ], 'created_at' => [ 'type' => 'TIMESTAMP', // Je nach Datenbank ein passender Default-Wert // MySQL: 'default' => new RawSql('CURRENT_TIMESTAMP'), // PostgreSQL: 'default' => new RawSql('NOW()'), 'default' => new RawSql($this->db->getPlatform() === 'MySQLi' ? 'CURRENT_TIMESTAMP' : 'NOW()'), // Dynamische Auswahl ], '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 als Primärschlüssel $this->forge->createTable('users'); // Tabelle erzeugen } public function down() { // Migration zurücksetzen und Tabelle löschen $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
51Hinweis: Oben wird je nach verwendeter Datenbankplattform das Zeitstempel-Feld dynamisch angepasst. Im produktiven Einsatz können Sie eine anspruchsvollere Logik oder separate Migrationsdateien für verschiedene Datenbanken verwenden.
Migration ausführen: Im Terminal geben Sie nun ein:
bashphp spark migrate
1Bei Erfolg meldet das Terminal einen erfolgreichen Abschluss der Migration. Prüfen Sie optional mit ServBay-Tools wie Adminer, ob die Tabelle
users
in Ihrer Datenbankservbay_codeigniter_app
entstanden ist.
Datenbankbeispiele aufrufen
Vergewissern Sie sich, dass Sie die korrekten Zugangsdaten in app/Config/Database.php
hinterlegt und die Migration durchgeführt haben, um die Tabelle users
anzulegen.
Benutzer hinzufügen: Rufen Sie
https://servbay-codeigniter-test.local/add-user
auf. Jeder Aufruf dieses Links fügt der Tabelle einen neuen Benutzer hinzu. Sie sehen etwa die MeldungUser added successfully: user_XXXXXXXXXX@servbay.demo
.Benutzer abfragen: Besuchen Sie
https://servbay-codeigniter-test.local/list-users
Damit werden alle Einträge aus der Tabelleusers
im JSON-Format ausgegeben – ein Array mit Benutzerdaten sollte erscheinen.
Zusammenfassung
Mit dieser Anleitung haben Sie erfolgreich ein CodeIgniter-Projekt in der ServBay-Umgebung unter macOS eingerichtet, konfiguriert und gestartet. Sie wissen jetzt, wie ein neues Projekt mit Composer angelegt wird, wie Sie ServBays Website-Funktion auf das richtige Verzeichnis einstellen, die CodeIgniter-Datenbank sowie Cache-Verbindungen konfigurieren und die Integration anhand von Beispielcode testen. ServBay erleichtert die lokale Umgebungseinrichtung und Verwaltung, sodass Sie sich voll und ganz auf die Entwicklung Ihrer CodeIgniter-Anwendung konzentrieren können.