CakePHP-Projekte mit ServBay erstellen und ausführen
ServBay ist eine lokale Webentwicklungsumgebung für macOS und Windows, die zahlreiche Programmiersprachen wie PHP, Node.js, Python, Go, Java sowie Datenbankdienste wie MySQL, PostgreSQL, MongoDB und Redis integriert. Mit den Webservern Caddy oder Nginx bietet ServBay eine schnelle und komfortable Plattform zur Einrichtung und Verwaltung von lokalen Entwicklungsprojekten.
In diesem Artikel erfahren Sie, wie Sie in ServBay ein CakePHP-Projekt erstellen, konfigurieren und ausführen. CakePHP ist ein etabliertes PHP-Framework, das das MVC-Muster (Model-View-Controller) verwendet und für seine schnelle Entwicklungszeit, leistungsfähige ORM und integrierte Sicherheitsfunktionen bekannt ist. Die Kombination aus ServBay und CakePHP ermöglicht Ihnen einen schnellen Einstieg in die Webentwicklung.
Was ist CakePHP?
CakePHP ist ein Open-Source-PHP-Framework für die Entwicklung von Webanwendungen. Es stellt eine solide Basis bereit, um strukturierte und schnelle Webanwendungen zu erstellen, ohne auf Flexibilität verzichten zu müssen. Das Framework verfolgt das Prinzip „Convention over Configuration“ und vereinfacht damit viele gängige Entwicklungsaufgaben.
Hauptmerkmale und Vorteile von CakePHP
- MVC-basiertes Design: Klare Code-Struktur, leicht wartbar und erweiterbar.
- Schnelle Entwicklung: Kommandozeilen-Tool (Bake) zur automatischen Code-Generierung unterstützt schnelles Arbeiten.
- Leistungsfähiges ORM (Object-Relational Mapping): Vereinfacht Datenbankzugriffe und ist mit verschiedenen Datenbanksystemen kompatibel.
- Integrierte Sicherheitsfeatures: Bietet Schutz gegen CSRF, SQL-Injection, Input-Validierung und mehr.
- Flexibles Templating-System: Unterstützung verschiedener View-Technologien.
- Aktive Community und viele Plugins: Schnelle Hilfe bei Problemen und große Erweiterbarkeit.
- Umfassende Dokumentation: Ausführliche Guides und API-Referenzen.
CakePHP eignet sich zur Entwicklung von Webprojekten jeder Größe – von einfachen APIs bis hin zu komplexen Geschäftsanwendungen.
Entwicklung mit CakePHP in ServBay
ServBay bietet eine optimal integrierte Umgebung für CakePHP-Projekte:
- Vorinstallierte PHP-Interpreter und gängige Erweiterungen.
- Vorinstallierter Composer-Paketmanager.
- Einfach konfigurierbare Webserver (Caddy/Nginx).
- Eingebaute Datenbankdienste (MySQL, PostgreSQL, Redis usw.).
Mit ServBay umgehen Sie zeitaufwändige manuelle Installationen und Konfigurationen dieser Komponenten.
Voraussetzungen
Stellen Sie vor dem Einstieg sicher, dass folgende Bedingungen erfüllt sind:
- ServBay installieren: Laden Sie ServBay für macOS herunter und installieren Sie es erfolgreich.
- ServBay-Dienste starten: Öffnen Sie die ServBay-App und stellen Sie sicher, dass die benötigten Dienste (z. B. PHP, die gewünschte Datenbank wie MySQL oder PostgreSQL sowie Cache-Dienste wie Redis oder Memcached) aktiviert sind. Die Verwaltung erfolgt im „Pakete“-Tab des ServBay-Controls.
- Grundkenntnisse in der ServBay-Bedienung: Wissen Sie, wie Websites in ServBay hinzugefügt und eingerichtet werden? Falls nicht, lesen Sie zuerst den ServBay-Grundlagen-Guide.
CakePHP-Projekt erstellen
ServBay empfiehlt, Webprojektdateien einheitlich im Verzeichnis /Applications/ServBay/www
zu speichern. So erkennt und verwaltet ServBay Websites automatisch.
Terminal öffnen
Starten Sie die Terminal-App unter macOS.
Zum ServBay-Webverzeichnis wechseln
Wechseln Sie ins empfohlene Verzeichnis:
bashcd /Applications/ServBay/www
1Projektverzeichnis anlegen
Erstellen Sie einen Unterordner für Ihr CakePHP-Projekt. Beispiel:
servbay-cakephp-app
bashmkdir servbay-cakephp-app cd servbay-cakephp-app
1
2CakePHP-Projekt mit Composer anlegen
Composer ist in ServBay bereits vorinstalliert. Legen Sie mit Composer den Projekt-Template an:
bashcomposer create-project --prefer-dist cakephp/app .
1Das lädt die aktuelle stabile CakePHP-Version samt Abhängigkeiten und installiert sie ins aktuelle Verzeichnis (
.
).ORM-Treiber installieren (bei PostgreSQL)
Wenn Sie PostgreSQL nutzen, installieren Sie den spezifischen ORM-Treiber:
bashcomposer require cakephp/orm-pgsql
1Für MySQL ist kein zusätzlicher Treiber nötig, da dieser bereits im CakePHP-Kern enthalten ist.
Grundkonfiguration
Nach der Projekterstellung sind Basis-Konfigurationen nötig, vor allem für die Datenbankverbindung.
Umgebungsvariablen und Datenbankzugang konfigurieren
Die lokale Umgebungskonfiguration von CakePHP befindet sich primär in
config/app_local.php
. Bearbeiten Sie die Datei, finden Sie den BereichDatasources
und passen Sie die Datenbankdetails an. Standardmäßig nutzt ServBay den Benutzernamenroot
und das Passwortpassword
.Beispiel für MySQL:
php// config/app_local.php 'Datasources' => [ 'default' => [ 'className' => \Cake\Database\Connection::class, 'driver' => \Cake\Database\Driver\Mysql::class, // Oder \Cake\Database\Driver\Postgres::class für PostgreSQL 'persistent' => false, 'host' => '127.0.0.1', // Adresse des Datenbankservers (lokal) //'port' => '3306', // Standardport MySQL: 3306, PostgreSQL: 5432 'username' => 'root', // ServBay-Standard 'password' => 'password', // ServBay-Standard 'database' => 'servbay_cakephp_app', // Name der zu erstellenden Datenbank 'encoding' => 'utf8mb4', 'timezone' => 'UTC', 'flags' => [], 'cacheMetadata' => true, 'log' => false, /** * Set identifier quoting to true if you are using words like "user" as your table name. * But if you are using words like "cake" you can set it to false. * If you don't know use true. */ 'quoteIdentifiers' => false, /** * Current limitations include the following: * - Most drivers do not support setting isolation levels via PDO options. * Using them will result in an error. * - Not all drivers support setting the charset via PDO options. * Using them will result in an error. * - PDO options are not supported for packaged drivers like Postgres from CakePHP. * For Postgres, you only need to set the encoding. */ 'options' => [], //'url' => env('DATABASE_URL', null), // Aktivieren, falls Sie die Umgebungsvariable DATABASE_URL nutzen ], ],
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
38Passen Sie
driver
und ggf.port
entsprechend Ihrer Datenbank an. Derdatabase
-Name muss zur tatsächlich erstellten Datenbank passen.
Webserver konfigurieren (Website in ServBay einrichten)
Um Ihr CakePHP-Projekt per Browser zu erreichen, müssen Sie in ServBay eine Website einrichten, die auf Ihr Projektverzeichnis zeigt.
ServBay-Control öffnen
Starten Sie das ServBay-Kontrollzentrum.
Zum Tab „Websites“ wechseln
Wählen Sie im linken Menü den Bereich „Websites“ (früher „Hosts“).
Neue Website hinzufügen
Klicken Sie unten auf das
+
und geben Sie folgende Daten ein:- Name: Eindeutiger, wiedererkennbarer Name – z. B.
My CakePHP Dev Site
. - Domain: Lokale Entwicklungsdomain, z. B.
servbay-cakephp-test.local
– ServBay leitet diese automatisch nach lokal weiter. - Website-Typ: Wählen Sie
PHP
. - PHP-Version: Typisch benötigt CakePHP 4+ PHP 7.4+, CakePHP 5+ PHP 8.1+ (z. B.
8.3
). - Document Root: Wichtig! Das Webserver-Wurzelverzeichnis Ihres CakePHP-Projekts ist der
webroot
-Ordner, nicht das Projekt-Hauptverzeichnis! Beispiel:/Applications/ServBay/www/servbay-cakephp-app/webroot
(ändern Sie ggf. den Verzeichnisnamen).
- Name: Eindeutiger, wiedererkennbarer Name – z. B.
Speichern und Änderungen übernehmen
Nach dem Ausfüllen speichern Sie mit „Speichern“. Bestätigen Sie die daraufhin angezeigten Änderungen. ServBay richtet den Webserver (Caddy/Nginx) so ein, dass die Domain
servbay-cakephp-test.local
direkt auf denwebroot
-Ordner Ihres Projektes zeigt.
Ausführliche Schritte zum Hinzufügen finden Sie im ServBay-Dokument „Erste Website hinzufügen“.
Basisinstallation testen
Ihr Projekt sollte im Browser verfügbar sein.
Öffnen Sie den Browser und besuchen Sie Ihre gewählte Domain, z. B. https://servbay-cakephp-test.local
.
Wenn die Konfiguration stimmt, erscheint die CakePHP-Standard-Startseite. Damit sind die PHP-Umgebung, der Webserver und ServBay korrekt eingerichtet.
Datenbank- und Cache-Dienste integrieren
CakePHP bietet ein leistungsfähiges ORM sowie eine flexible Cache-Schnittstelle und bindet ServBay-Datenbank- sowie Cache-Services einfach ein.
Beispiel für relationale Datenbank (MySQL / PostgreSQL)
In diesem Beispiel verbinden Sie CakePHPs ORM mit ServBay (MySQL/PostgreSQL), erzeugen eine Tabelle users
und führen CRUD-Operationen durch.
Datenbank in ServBay erstellen
Legen Sie vor Migrationsschritten in ServBay eine neue Datenbank an. Nutzen Sie dazu das Datenbank-Tool (phpMyAdmin für MySQL/MariaDB, pgAdmin für PostgreSQL oder Navicat/DBeaver), verbinden Sie sich mit
127.0.0.1
, Benutzerroot
, Passwortpassword
und erstellen Sie die Datenbankservbay_cakephp_app
.ORM-Model anlegen
CakePHPs ORM erfordert ein Model-File. Erstellen bzw. speichern Sie
UsersTable.php
untersrc/Model/Table/UsersTable.php
:php<?php namespace App\Model\Table; use Cake\ORM\Table; use Cake\Validation\Validator; // Für Validierungsregeln class UsersTable extends Table { /** * Initialize method * * @param array $config The configuration for the Table. * @return void */ public function initialize(array $config): void { parent::initialize($config); $this->setTable('users'); // Name der Tabelle angeben $this->setDisplayField('name'); // Standardanzeigefeld bei Beziehungen $this->setPrimaryKey('id'); // Primärschlüssel angeben // Aktivieren Sie Timestamp-Behavior bei Bedarf // $this->addBehavior('Timestamp'); } /** * Default validation rules. * * @param \Cake\Validation\Validator $validator Validator instance. * @return \Cake\Validation\Validator */ public function validationDefault(Validator $validator): Validator { $validator ->scalar('name') ->maxLength('name', 255) ->requirePresence('name', 'create') ->notEmptyString('name'); $validator ->email('email') ->requirePresence('email', 'create') ->notEmptyString('email') ->add('email', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); // Email muss eindeutig sein return $validator; } }
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
49Migration mit Bake-Tool erzeugen
Nutzen Sie im Projektverzeichnis
/Applications/ServBay/www/servbay-cakephp-app
das Bake-Tool, um die Migration für die Tabelleusers
zu erstellen:bashbin/cake bake migration CreateUsers name:string email:string:unique
1Dieser Befehl erzeugt eine Migration für die neue Tabelle mit den Feldern
name
(String) undemail
(String, eindeutig).Migration durchführen
Mit folgendem Befehl richten Sie die Tabelle tatsächlich in Ihrer Datenbank ein:
bashbin/cake migrations migrate
1Nach Erfolg sollte die Tabelle
users
in der Datenbank sichtbar sein.Datenbankverbindung konfigurieren (sofern noch nicht geschehen)
Passen Sie die Datenbank-Konfiguration in
config/app_local.php
entsprechend Ihrer Datenbank an.MySQL Beispiel:
php'Datasources' => [ 'default' => [ 'className' => \Cake\Database\Connection::class, 'driver' => \Cake\Database\Driver\Mysql::class, 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'database' => 'servbay_cakephp_app', // ... weitere Einstellungen ], ],
1
2
3
4
5
6
7
8
9
10
11PostgreSQL Beispiel:
php'Datasources' => [ 'default' => [ 'className' => \Cake\Database\Connection::class, 'driver' => \Cake\Database\Driver\Postgres::class, 'host' => '127.0.0.1', // 'port' => '5432', // Standardport 'username' => 'root', // ServBay-Standard 'password' => 'password', // ServBay-Standard 'database' => 'servbay_cakephp_app', // ... weitere Einstellungen ], ],
1
2
3
4
5
6
7
8
9
10
11
12
Beispiel-Routes und Controller-Methoden hinzufügen
Ergänzen Sie in
config/routes.php
zwei Routen für die User-Datenbank-Operationen:php// config/routes.php use Cake\Routing\RouteBuilder; use Cake\Routing\Router; use Cake\Routing\Route\DashedRoute; Router::defaultRouteClass(DashedRoute::class); Router::scope('/', function (RouteBuilder $routes) { // ... weitere Routen $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); // Beispielrouten für Datenbank $routes->connect('/db-add-user', ['controller' => 'Pages', 'action' => 'dbAddUser']); $routes->connect('/db-list-users', ['controller' => 'Pages', 'action' => 'dbListUsers']); // ... weitere Routen $routes->fallbacks(DashedRoute::class); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Ergänzen Sie Methoden für Datenbankaktionen in
src/Controller/PagesController.php
:php<?php namespace App\Controller; use Cake\Http\Response; use Cake\ORM\TableRegistry; use Cake\Datasource\Exception\RecordNotFoundException; // Für Fehlerbehandlung class PagesController extends AppController { /** * Displays a view * * @param array ...$path Path segments. * @return \Cake\Http\Response|null */ public function display(...$path): ?Response { // Standard-Display-Methode return new Response(['body' => 'Hello ServBay! This is the default page.']); } /** * Datenbankbeispiel: Benutzer hinzufügen */ public function dbAddUser(): Response { $usersTable = TableRegistry::getTableLocator()->get('Users'); // Users Table-Instanz holen // Neues Benutzer-Entity anlegen $user = $usersTable->newEntity([ 'name' => 'ServBay Demo User', 'email' => 'servbay-demo@servbay.test' // Beispiel-E-Mail mit ServBay ]); // Entity speichern if ($usersTable->save($user)) { return new Response(['body' => 'User added successfully! User ID: ' . $user->id]); } else { // Fehler auslesen $errors = $user->getErrors(); return new Response(['body' => 'Failed to add user. Errors: ' . json_encode($errors)]); } } /** * Datenbankbeispiel: Alle Benutzer anzeigen */ public function dbListUsers(): Response { $usersTable = TableRegistry::getTableLocator()->get('Users'); // Alle Benutzer finden $users = $usersTable->find()->all(); // Ausgabe als JSON return new Response(['body' => json_encode($users->toArray())]); // Collection in Array umwandeln } }
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
58Beispiel aufrufen
- Rufen Sie
https://servbay-cakephp-test.local/db-add-user
auf, um einen Benutzer anzulegen. Es sollte eine Erfolgsnachricht erscheinen. - Mit
https://servbay-cakephp-test.local/db-list-users
sehen Sie die Liste aller Benutzer (inklusive des eben angelegten).
- Rufen Sie
Damit ist CakePHP erfolgreich mit einer ServBay-Datenbank verbunden – die grundlegenden ORM-Funktionen sind abgedeckt.
Beispiel Caching-Dienst (Memcached / Redis)
Dank einheitlicher Caching-API können Sie CakePHP flexibel mit Memcached oder Redis verwenden. ServBay installiert die passenden PHP-Extensions und bietet die dazugehörigen Services.
Stellen Sie sicher, dass im „Pakete“-Tab von ServBay Memcached bzw. Redis aktiviert sind.
Cache-Verbindung konfigurieren
Bearbeiten Sie die Datei
config/app_local.php
im Abschnitt „Cache“.Memcached Beispiel:
php// config/app_local.php 'Cache' => [ 'default' => [ 'className' => \Cake\Cache\Engine\MemcachedEngine::class, 'servers' => ['127.0.0.1:11211'], // ServBay-Default-Adresse und Port 'prefix' => 'servbay_cakephp_', // Präfix für Cache-Keys ], // ... weitere Cache-Konfigurationen ],
1
2
3
4
5
6
7
8
9Redis Beispiel:
php// config/app_local.php 'Cache' => [ 'default' => [ 'className' => \Cake\Cache\Engine\RedisEngine::class, 'host' => '127.0.0.1', // ServBay-Default für Redis 'port' => 6379, 'password' => null, // Falls ein Passwort gesetzt wird, hier eintragen 'database' => 0, // Redis-Datenbankindex 'prefix' => 'servbay_cakephp_', // Präfix für Cache-Keys ], // ... weitere Cache-Konfigurationen ],
1
2
3
4
5
6
7
8
9
10
11
12
Wählen Sie das entsprechende Caching-Backend und passen Sie die Einstellungen an.
Beispielrouten und Controller-Methoden hinzufügen
In
config/routes.php
neue Routen einfügen:php// config/routes.php // ... weitere Routen $routes->connect('/cache-memcached', ['controller' => 'Pages', 'action' => 'cacheMemcached']); $routes->connect('/cache-redis', ['controller' => 'Pages', 'action' => 'cacheRedis']); // ... weitere Routen
1
2
3
4
5Ergänzen Sie in
src/Controller/PagesController.php
Methoden für das Cache-Beispiel:php<?php namespace App\Controller; use Cake\Http\Response; use Cake\Cache\Cache; // Cache-Klasse importieren // ... weitere use-Anweisungen class PagesController extends AppController { // ... weitere Methoden (display, dbAddUser, dbListUsers) /** * Cache-Beispiel: mit Memcached */ public function cacheMemcached(): Response { // Cache-Konfiguration in app_local.php: 'default' -> MemcachedEngine $cacheKey = 'servbay_memcached_test_key'; $cachedData = Cache::read($cacheKey); $responseBody = ''; if ($cachedData === false) { // Kein Cache-Treffer $responseBody = 'Cache miss! Writing "Hello Memcached!" to cache.'; $dataToCache = 'Hello Memcached!'; Cache::write($cacheKey, $dataToCache, 'default'); } else { // Cache-Treffer $responseBody = 'Cache hit! Data from cache: ' . $cachedData; } return new Response(['body' => $responseBody]); } /** * Cache-Beispiel: mit Redis */ public function cacheRedis(): Response { // Cache-Konfiguration in app_local.php: 'default' -> RedisEngine $cacheKey = 'servbay_redis_test_key'; $cachedData = Cache::read($cacheKey); $responseBody = ''; if ($cachedData === false) { $responseBody = 'Cache miss! Writing "Hello Redis!" to cache.'; $dataToCache = 'Hello Redis!'; Cache::write($cacheKey, $dataToCache, 'default'); } else { $responseBody = 'Cache hit! Data from cache: ' . $cachedData; } return new Response(['body' => $responseBody]); } }
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
59Cache-Beispiel aufrufen
- Bei Memcached-Konfiguration besuchen Sie
https://servbay-cakephp-test.local/cache-memcached
. Beim ersten Aufruf erscheint „Cache miss“, nach dem Neuladen „Cache hit“. - Für Redis besuchen Sie
https://servbay-cakephp-test.local/cache-redis
. Auch hier: erster Aufruf „Cache miss“, beim Aktualisieren „Cache hit“.
- Bei Memcached-Konfiguration besuchen Sie
Damit ist CakePHP in ServBay erfolgreich mit einem Caching-Service verbunden.
Hinweise
- Datenbank-Credentials: Die Standard-Anmeldeinformationen von ServBay (
root
/password
) sind rein für die Entwicklung gedacht. Nutzen Sie für produktive Umgebungen sichere Zugangsdaten! - Document Root: Das ServBay-Websites „Document Root“ muss auf das
webroot
-Verzeichnis im CakePHP-Projekt zeigen. Dies entspricht Best Practice. - PHP-Kompatibilität: Die PHP-Version in ServBay muss zur genutzten CakePHP-Version passen. Prüfen Sie dies in der CakePHP-Dokumentation.
- ServBay-Ports: Sind die Standardports (80/443) durch andere Programme belegt, passen Sie in ServBay die Ports an und greifen ggf. per Portnummer oder Anpassung der hosts-Datei auf Ihr Projekt zu.
FAQ – Häufige Fragen
- Q: Die Adresse
servbay-cakephp-test.local
liefert „Seite nicht gefunden“?- A: Prüfen Sie, ob das Document Root korrekt auf
/Applications/ServBay/www/servbay-cakephp-app/webroot
zeigt. - Kontrollieren Sie, ob der Webserver (Caddy/Nginx) läuft.
- Prüfen Sie, ob die Domain in der hosts-Datei auf
127.0.0.1
zeigt (ServBay regelt dies meist automatisch). - Prüfen Sie die
.htaccess
-Dateien und Webserver-Konfiguration im CakePHP-Projekt (im Normalfall stimmt die Standard-Konfiguration).
- A: Prüfen Sie, ob das Document Root korrekt auf
- Q: Datenbankverbindung schlägt fehl?
- A: Kontrollieren Sie, ob der gewählte Datenbankdienst (MySQL/PostgreSQL) in ServBay läuft.
- Stimmen die Einstellungen in
config/app_local.php
für host, port, username, password und database? - Ist die Datenbank
servbay_cakephp_app
im Server angelegt?
- Q: Composer- oder
bin/cake
-Befehle funktionieren nicht?- A: Sind Sie im Projektstammverzeichnis (
/Applications/ServBay/www/servbay-cakephp-app
)? - Laufen PHP und Composer in ServBay?
- Ist der Befehl
php
im PATH verfügbar? Nutzen Sie ggf. das im ServBay integrierte Terminal oder setzen Sie den PATH manuell.
- A: Sind Sie im Projektstammverzeichnis (
Fazit
ServBay vereinfacht und beschleunigt die lokale Einrichtung für CakePHP-Projekte erheblich. Vorinstalliertes PHP, Composer, Webserver und Datenbankdienste nehmen Ihnen den Großteil der Konfigurationsarbeit ab. Dieser Leitfaden zeigt Ihnen Schritt für Schritt die Projektentstehung, Grundkonfiguration, Webserver-Setup sowie die Integration von Datenbank und Caching – sodass Sie sich auf Ihre eigentliche Codearbeit statt auf den komplexen Systemaufbau konzentrieren können.