Erstellen und Ausführen eines Zend Framework (Laminas) Projekts in ServBay
Überblick
Zend Framework (heute Teil des Laminas Projects) ist ein leistungsfähiges Open-Source-PHP-Framework, das eine Vielzahl hochwertiger, objektorientierter Komponenten für die Entwicklung moderner Webanwendungen und -dienste bereitstellt. Es ist bekannt für Flexibilität, modulare Architektur und hohe Performance – ideal für alles vom einfachen Webauftritt bis zu komplexen Enterprise-Anwendungen.
ServBay ist eine lokale Webentwicklungsumgebung, die speziell für macOS entwickelt wurde. Sie integriert PHP, verschiedene Webserver (wie Caddy und Nginx), Datenbanken (wie MySQL, PostgreSQL, MongoDB), Caching-Dienste (wie Redis, Memcached) und weitere Entwicklungstools in einem Paket. ServBay bietet einen einfachen Weg zur Konfiguration und Verwaltung dieser Software, sodass sich verschiedene PHP-Framework-Projekte unkompliziert lokal ausführen lassen.
Dieses Dokument zeigt Ihnen, wie Sie ein Zend Framework (Laminas) Projekt in ServBay erstellen und ausführen und wie Sie Datenbank- sowie Cache-Dienste von ServBay integrieren.
Voraussetzungen
Bitte stellen Sie vor Beginn Folgendes sicher:
- ServBay installieren: Sie haben ServBay erfolgreich auf Ihrem macOS-System installiert und gestartet. Ist dies noch nicht geschehen, besuchen Sie die offizielle ServBay Website zum Download und zur Installationsanleitung.
- ServBay Pakete: Die benötigten Pakete sind in ServBay installiert und laufen bereits:
- Mindestens eine PHP-Version (empfohlen wird PHP 8.x bzw. neuer, da Laminas aktuelle Versionen voraussetzt).
- Ein Webserver (Caddy oder Nginx).
- Composer (wird standardmäßig mit ServBay ausgeliefert).
- Die gewünschten Datenbankdienste (z. B. MySQL, PostgreSQL) und Caching-Dienste (z. B. Memcached, Redis). Sie können diese Dienste bequem über das ServBay-Kontrollzentrum starten.
Zend Framework Projekt erstellen
Es wird empfohlen, Ihre Webprojekte gesammelt im Ordner /Applications/ServBay/www
abzulegen. Damit kann ServBay Ihre Websites automatisch erkennen und verwalten.
Wechsel ins Webroot
Öffnen Sie Ihr Terminal und navigieren Sie zum empfohlenen Webroot:
bashcd /Applications/ServBay/www
1Projekt per Composer anlegen
Composer ist standardmäßig in ServBay enthalten. Legen Sie mit dem Composer-Befehl
create-project
eine neue Zend Framework (Laminas Skeleton Application) im Unterordnerservbay-zend-app
an:bashcomposer create-project laminas/laminas-skeleton-application servbay-zend-app
1Damit wird das Laminas-Skelettprojekt im Ordner
servbay-zend-app
angelegt und die notwendigen Abhängigkeiten installiert.Zum Projektverzeichnis wechseln
Wechseln Sie in das soeben erstellte Verzeichnis:
bashcd servbay-zend-app
1
Webserver konfigurieren
Um Ihr Zend Framework-Projekt im Browser erreichbar zu machen, müssen Sie eine Website in ServBay konfigurieren.
- ServBay Control Panel öffnen: Starten Sie ServBay.
- Zu den Website-Einstellungen: Wechseln Sie im Control Panel auf den Tab Websites.
- Neue Website hinzufügen: Klicken Sie unten links auf das
+
, um eine neue Website-Konfiguration anzulegen. - Website-Informationen ausfüllen:
- Name: Vergeben Sie einen sprechenden Namen wie
My Zend Dev Site
. - Domain: Definieren Sie den Domainnamen, unter dem Ihr Projekt im Browser erreichbar sein soll. Nutzen Sie eine
.local
oder.test
-Endung, um Konflikte mit realen Domains zu vermeiden, z. B.servbay-zend-test.local
. ServBay richtet die lokale DNS-Auflösung automatisch ein. - Websitetyp: Wählen Sie
PHP
. - PHP-Version: Wählen Sie die gewünschte PHP-Version (z. B.
8.3
). Stellen Sie sicher, dass diese in ServBay installiert und aktiv ist. - Document Root: Dies ist der Verzeichnis-Pfad, den der Webserver veröffentlicht. Beim Zend Framework liegt der Einstiegspunkt
index.php
im Unterordnerpublic
. Die Document Root sollte also gesetzt werden auf:/Applications/ServBay/www/servbay-zend-app/public
.
- Name: Vergeben Sie einen sprechenden Namen wie
- Speichern & Neustarten: Klicken Sie auf Save. Nach der Bestätigung lädt der Webserver mit der neuen Konfiguration neu und Ihre Website ist verfügbar.
Weitere Details finden Sie in der ServBay-Dokumentation im Abschnitt Erste Website hinzufügen.
Einfaches "Hello ServBay!" Beispiel
Jetzt ändern wir den Quellcode Ihres Projektes so, dass bei Aufruf der Startseite (/
) "Hello ServBay!" angezeigt wird.
Router und Controller konfigurieren (module.config.php)
Bearbeiten Sie die Datei
module/Application/config/module.config.php
und stellen Sie sicher, dass Folgendes zur grundlegenden Routen- und Controller-Konfiguration enthalten ist:php<?php declare(strict_types=1); namespace Application; use Laminas\Router\Http\Literal; use Laminas\Router\Http\Segment; use Laminas\ServiceManager\Factory\InvokableFactory; return [ 'router' => [ 'routes' => [ 'home' => [ 'type' => Literal::class, 'options' => [ 'route' => '/', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'index', ], ], ], // ... weitere Routen-Konfigurationen ], ], 'controllers' => [ 'factories' => [ Controller\IndexController::class => InvokableFactory::class, ], ], 'view_manager' => [ 'display_not_found_reason' => true, 'display_exceptions' => true, 'doctype' => 'HTML5', 'not_found_template' => 'error/404', 'exception_template' => 'error/index', 'template_map' => [ 'layout/layout' => __DIR__ . '/../view/layout/layout.phtml', 'application/index/index' => __DIR__ . '/../view/application/index/index.phtml', 'error/404' => __DIR__ . '/../view/error/404.phtml', 'error/index' => __DIR__ . '/../view/error/index.phtml', ], 'template_path_stack' => [ __DIR__ . '/../view', ], ], // ... weitere Konfigurationen ];
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
49Hinweis: Der obenstehende Ausschnitt ist Teil des
module.config.php
. Fügen Sie ihn in das bestehende Config-Array ein. Achten Sie darauf, dass die'home'
-Route und die Factory fürController\IndexController::class
enthalten sind.Controller erstellen/anpassen (IndexController.php)
Bearbeiten oder erstellen Sie die Datei
module/Application/src/Controller/IndexController.php
und stellen Sie sicher, dassindexAction
eine ViewModel-Instanz mit einer Nachricht zurückgibt:php<?php declare(strict_types=1); namespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; class IndexController extends AbstractActionController { /** * Default action to display the welcome page. */ public function indexAction() { // Gibt ein ViewModel zurück und übergibt die Variable 'message' an die View return new ViewModel([ 'message' => 'Hello ServBay!', ]); } // ... weitere Action-Methoden }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24View-Datei erstellen oder bearbeiten (index.phtml)
Bearbeiten oder erstellen Sie die Datei
module/Application/view/application/index/index.phtml
. Dort soll die vom Controller übergebene Variablemessage
angezeigt werden:php<h1><?php echo $this->message; ?></h1>
1Über den View-Helper
$this->message
wird hier der Wert aus dem Controller dargestellt.
Website aufrufen
Öffnen Sie Ihren Webbrowser und rufen Sie die konfigurierte Domain auf, z. B. https://servbay-zend-test.local
.
Wenn die Konfiguration korrekt ist, sehen Sie "Hello ServBay!" im Browser. Ihr Zend Framework Projekt läuft erfolgreich in ServBay.
Beispiele zur Integration von Datenbank und Caching
ServBay bietet zahlreiche Datenbank- und Caching-Dienste. Im Folgenden sehen Sie Beispiele für die Einbindung und Nutzung von Memcached, Redis, MySQL und PostgreSQL mit Zend Framework.
Wichtiger Hinweis: Die folgenden Beispiele sind jeweils für sichstehende Demos. In Erwachsenenprojekten wählen Sie meist einen Datenbanktyp sowie ein oder mehrere Caches nach Bedarf aus und verwalten die Verbindungen über Dependency Injection. Sie müssen die jeweiligen Dienste in ServBay vorab aktivieren (z. B. MySQL, PostgreSQL, Memcached, Redis).
Beispiel Datenbankinteraktion – Tabelle anlegen
Zunächst zeigen wir, wie Sie mit dem Laminas DB-Komponenten ein einfaches Datenbank-Tabellen-Schema anlegen. Das Beispiel nutzt einen eigenen Table-Create-Befehl statt der vollständigen Laminas Migrations.
Laminas DB installieren
Im Projektverzeichnis installieren Sie das Laminas DB-Paket via Composer:
bashcomposer require laminas/laminas-db
1Datenbank manuell anlegen
Legen Sie mit beispielsweise phpMyAdmin, pgAdmin oder MongoDB Compass eine Datenbank mit Namen
servbay_zend_app
an. In ServBay sind die Default-Zugangsdaten: MySQL/MariaDB: Benutzerroot
, Passwortpassword
. PostgreSQL: Benutzerroot
, Passwortpassword
.Table-Create Script definieren und ausführen (Beispiel)
Erstellen Sie eine PHP-Datei, etwa
create_users_table.php
(im Projekt oder temporär), mit folgendem Inhalt:php<?php // create_users_table.php use Laminas\Db\Adapter\Adapter; use Laminas\Db\Sql\Sql; // Beispiel für MySQL oder MariaDB $adapter = new Adapter([ 'driver' => 'Pdo_Mysql', // oder 'Pdo_Pgsql' 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', // ServBay-Standard 'hostname' => '127.0.0.1', // 'port' => 3306, // MySQL // 'port' => 5432, // PostgreSQL ]); $sql = new Sql($adapter); // SQL zum Erstellen der Tabelle users $create = $sql->createTable('users') ->addColumn(new \Laminas\Db\Sql\Ddl\Column\Integer('id', false, null, ['AUTO_INCREMENT' => true])) ->addColumn(new \Laminas\Db\Sql\Ddl\Column\Varchar('name', 255)) ->addColumn(new \Laminas\Db\Sql\Ddl\Column\Varchar('email', 255, ['UNIQUE' => true])) ->addConstraint(new \Laminas\Db\Sql\Ddl\Constraint\PrimaryKey('id')); echo "Executing SQL:\n"; echo $sql->buildSqlString($create, $adapter->getPlatform()) . "\n"; try { // SQL ausführen $adapter->query( $sql->buildSqlString($create, $adapter->getPlatform()), Adapter::QUERY_MODE_EXECUTE ); echo "Table 'users' created successfully.\n"; } catch (\Exception $e) { echo "Error creating table: " . $e->getMessage() . "\n"; }
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
38Hinweis: Das ist ein manuell ausführbares Beispielskript. In größeren Projekten nutzen Sie meist Laminas-Migrations.
Mit dem PHP-CLI können Sie das Skript ausführen (Pfad ggf. anpassen):
bashphp create_users_table.php
1
Beispiel MySQL-Integration
Dieses Beispiel demonstriert, wie Sie im Zend Framework Controller auf MySQL zugreifen und Daten abfragen.
Datenbankverbindung konfigurieren
Bearbeiten Sie die Datei
config/autoload/global.php
und ergänzen bzw. ändern Sie die MySQL-Verbindungsdaten:php<?php // config/autoload/global.php return [ 'db' => [ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', // sicherstellen, dass die DB existiert 'username' => 'root', // Standard-Benutzer in ServBay 'password' => 'password', // Standard-Passwort 'hostname' => '127.0.0.1', 'port' => 3306, // Standard-Port MySQL 'charset' => 'utf8mb4', ], // ... weitere globale Konfigurationen ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14Factory für Controller erstellen (module.config.php)
Um
Laminas\Db\Adapter\Adapter
im Controller zu verwenden, definieren Sie eine Factory für denIndexController
inmodule/Application/config/module.config.php
. Falls bereitsInvokableFactory
genutzt wird, ersetzen Sie die Factory folgendermaßen:php<?php // module/Application/config/module.config.php namespace Application; use Laminas\ServiceManager\Factory\InvokableFactory; use Laminas\Db\Adapter\AdapterInterface; return [ // ... weitere Konfigurationen 'controllers' => [ 'factories' => [ Controller\IndexController::class => function($container) { // Adapter aus dem Service Manager holen $adapter = $container->get(AdapterInterface::class); // Controller-Instanz erstellen (mit Adapter) return new Controller\IndexController($adapter); }, // weitere Controller Factories nach Bedarf ], ], 'service_manager' => [ 'aliases' => [ // Alias: AdapterInterface → Adapter AdapterInterface::class => 'Laminas\Db\Adapter\Adapter', ], 'factories' => [ // Factory für den Adapter 'Laminas\Db\Adapter\Adapter' => \Laminas\Db\Adapter\AdapterServiceFactory::class, ], ], // ... weitere Konfigurationen ];
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
32Hinweis: Fügen Sie den Block jeweils im Config-Array ein, besonders der Bereich
service_manager
muss stimmen, damit Dependency Injection funktioniert.Routing konfigurieren (module.config.php)
Ergänzen Sie in
module/Application/config/module.config.php
folgende Routen für das MySQL-Beispiel:php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; return [ 'router' => [ 'routes' => [ // bestehende Routen, z. B. 'home' 'mysql-add' => [ 'type' => Literal::class, 'options' => [ 'route' => '/mysql-add', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'mysqlAdd', ], ], ], 'mysql' => [ 'type' => Literal::class, 'options' => [ 'route' => '/mysql', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'mysql', ], ], ], ], ], // ... weitere Konfigurationen ];
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
34Fügen Sie diese in den
'routes'
Unterschlüssel unter'router'
ein.Controller-Methoden ergänzen (IndexController.php)
Ergänzen Sie in
module/Application/src/Controller/IndexController.php
einen Konstruktor für Dependency Injection und die Methoden:php<?php declare(strict_types=1); namespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Db\Adapter\AdapterInterface; use Laminas\Db\Sql\Sql; class IndexController extends AbstractActionController { private $adapter; // Privat-Property // Konstruktor erhält AdapterInterface public function __construct(AdapterInterface $adapter) { $this->adapter = $adapter; } /** * Default action to display the welcome page. */ public function indexAction() { return new ViewModel([ 'message' => 'Hello ServBay!', ]); } /** * Einen User in die Tabelle 'users' via MySQL einfügen. */ public function mysqlAddAction() { $sql = new Sql($this->adapter); $insert = $sql->insert('users') ->values([ 'name' => 'ServBay Demo User', 'email' => '[email protected]', // Beispiel-Mail ]); $statement = $sql->prepareStatementForSqlObject($insert); $result = $statement->execute(); // Ergebnis prüfen, einfache Message zur View $message = $result->getAffectedRows() > 0 ? 'MySQL User added successfully.' : 'Failed to add MySQL user.'; return new ViewModel([ 'message' => $message, ]); } /** * Alle Benutzer aus der Tabelle 'users' via MySQL abrufen. */ public function mysqlAction() { $sql = new Sql($this->adapter); $select = $sql->select('users'); $statement = $sql->prepareStatementForSqlObject($select); $result = $statement->execute(); $users = []; foreach ($result as $row) { $users[] = $row; } // Ergebnis als JSON-String weitergeben return new ViewModel([ 'users' => json_encode($users, JSON_PRETTY_PRINT), ]); } // ... weitere Action-Methoden }
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
78Ergänzen Sie diese Methoden an passender Stelle in der Klasse.
Views erstellen
Datei
module/Application/view/application/index/mysql-add.phtml
:php<h1><?php echo $this->message; ?></h1>
1Datei
module/Application/view/application/index/mysql.phtml
:php<h1>MySQL Users</h1> <pre><?php echo $this->users; ?></pre>
1
2Beispiel aufrufen
Aktivieren Sie in ServBay den MySQL-Dienst. Besuchen Sie dann
https://servbay-zend-test.local/mysql-add
, um einen Benutzer einzufügen, undhttps://servbay-zend-test.local/mysql
, um alle Nutzer als JSON zu sehen.
Beispiel PostgreSQL-Integration
So binden Sie PostgreSQL in einen Zend Framework Controller ein:
Datenbankverbindung konfigurieren
Passen Sie in
config/autoload/global.php
den Bereich'db'
wie folgt an. Beachten Sie: Der'db'
-Bereich überschreibt sonstige MySQL-Einstellungen:php<?php // config/autoload/global.php return [ 'db' => [ 'driver' => 'Pdo_Pgsql', 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', 'port' => 5432, // PostgreSQL-Standardport ], // ... weitere globale Konfigurationen ];
1
2
3
4
5
6
7
8
9
10
11
12
13Controller-Factory und Service Manager
(Wie beim MySQL-Beispiel) Stellen Sie sicher, dass Factory/Service Manager wie oben angegeben konfiguriert sind.
Routing konfigurieren (module.config.php)
Ergänzen Sie folgende Routen:
php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; return [ 'router' => [ 'routes' => [ // bestehende (z. B. 'home', 'mysql-add', 'mysql') 'pgsql-add' => [ 'type' => Literal::class, 'options' => [ 'route' => '/pgsql-add', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'pgsqlAdd', ], ], ], 'pgsql' => [ 'type' => Literal::class, 'options' => [ 'route' => '/pgsql', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'pgsql', ], ], ], ], ], // ... weitere Konfigurationen ];
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
34Controller-Methoden (IndexController.php)
Ergänzen Sie in
IndexController
die Methoden:php<?php declare(strict_types=1); namespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Db\Adapter\AdapterInterface; use Laminas\Db\Sql\Sql; class IndexController extends AbstractActionController { private $adapter; public function __construct(AdapterInterface $adapter) { $this->adapter = $adapter; } // ... bestehende Methoden (indexAction, mysqlAddAction, mysqlAction) /** * Einen User in die Tabelle 'users' via PostgreSQL einfügen. */ public function pgsqlAddAction() { $sql = new Sql($this->adapter); $insert = $sql->insert('users') ->values([ 'name' => 'ServBay Demo User', 'email' => '[email protected]', ]); $statement = $sql->prepareStatementForSqlObject($insert); $result = $statement->execute(); $message = $result->getAffectedRows() > 0 ? 'PostgreSQL User added successfully.' : 'Failed to add PostgreSQL user.'; return new ViewModel([ 'message' => $message, ]); } /** * Alle Benutzer aus 'users' via PostgreSQL abrufen. */ public function pgsqlAction() { $sql = new Sql($this->adapter); $select = $sql->select('users'); $statement = $sql->prepareStatementForSqlObject($select); $result = $statement->execute(); $users = []; foreach ($result as $row) { $users[] = $row; } // Ergebnis als JSON-String return new ViewModel([ 'users' => json_encode($users, JSON_PRETTY_PRINT), ]); } }
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
66Views erstellen
Datei
module/Application/view/application/index/pgsql-add.phtml
:php<h1><?php echo $this->message; ?></h1>
1Datei
module/Application/view/application/index/pgsql.phtml
:php<h1>PostgreSQL Users</h1> <pre><?php echo $this->users; ?></pre>
1
2Beispiel aufrufen
Starten Sie in ServBay den PostgreSQL-Dienst. Besuchen Sie
https://servbay-zend-test.local/pgsql-add
zum Einfügen,https://servbay-zend-test.local/pgsql
zum Anzeigen der Nutzer.
Beispiel Memcached-Integration
Wie Sie Memcached im Zend Framework nutzen:
Memcached-Adapter installieren
Ergänzen Sie in Ihrer
composer.json
das Memcached-Storage-Adapter-Paket –json// composer.json { "require": { "laminas/laminas-skeleton-application": "^1.0", "laminas/laminas-cache-storage-adapter-memcached": "^2.0" } }
1
2
3
4
5
6
7und führen Sie dann aus:
bashcomposer update
1Die PHP-Erweiterung
memcached
ist in ServBay bereits installiert.Routing konfigurieren (module.config.php)
Ergänzen Sie:
php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; return [ 'router' => [ 'routes' => [ // bestehende Routen 'memcached' => [ 'type' => Literal::class, 'options' => [ 'route' => '/memcached', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'memcached', ], ], ], ], ], // ... weitere Konfigurationen ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24Controller-Methode (IndexController.php)
Ergänzen Sie:
php<?php declare(strict_types=1); namespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Cache\StorageFactory; use Laminas\Cache\Storage\StorageInterface; class IndexController extends AbstractActionController { // ... Konstruktor und bestehende Actions /** * Memcached-Nutzung demonstrieren. */ public function memcachedAction() { // Memcached Storage-Instanz erstellen // ServBay Memcached läuft auf 127.0.0.1:11211 $cache = StorageFactory::factory([ 'adapter' => [ 'name' => 'memcached', 'options' => [ 'servers' => [ ['127.0.0.1', 11211], ], 'ttl' => 300, // 300 Sekunden Cache-Lifetime ], ], 'plugins' => [ 'serializer', 'exception_handler' => ['throw_exceptions' => false], ], ]); $cacheKey = 'my_memcached_data'; $cachedData = $cache->getItem($cacheKey, $success); if (!$success) { // Kein Cache-Hit $cachedData = 'Hello Memcached! (Data from source, cached at ' . date('Y-m-d H:i:s') . ')'; $cache->setItem($cacheKey, $cachedData); $cachedData .= ' - CACHE MISS'; } else { // Cache-Hit $cachedData .= ' - CACHE HIT'; } return new ViewModel([ 'message' => $cachedData, ]); } }
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
56View anlegen
Datei
module/Application/view/application/index/memcached.phtml
:php<h1>Memcached Example</h1> <p><?php echo $this->message; ?></p>
1
2Beispiel aufrufen
Starten Sie den Memcached-Dienst in ServBay. Rufen Sie
https://servbay-zend-test.local/memcached
auf. Beim ersten Zugriff erscheint die Nachricht mit "CACHE MISS". Innerhalb der Laufzeit (300 Sekunden) wird bei erneuter Anfrage "CACHE HIT" angezeigt.
Beispiel Redis-Integration
So binden Sie Redis ein:
Redis-Adapter installieren
Fügen Sie in Ihrer
composer.json
hinzu:json// composer.json { "require": { "laminas/laminas-skeleton-application": "^1.0", "laminas/laminas-cache-storage-adapter-redis": "^2.0", "ext-redis": "*" } }
1
2
3
4
5
6
7
8Dann:
bashcomposer update
1Die PHP-Extension
redis
ist in ServBay bereits enthalten.Routing konfigurieren (module.config.php)
Ergänzen Sie:
php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; return [ 'router' => [ 'routes' => [ // bisherige Routen 'redis' => [ 'type' => Literal::class, 'options' => [ 'route' => '/redis', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'redis', ], ], ], ], ], // ... weitere Konfigurationen ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24Controller-Methode (IndexController.php)
Ergänzen Sie:
php<?php declare(strict_types=1); namespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Cache\StorageFactory; use Laminas\Cache\Storage\StorageInterface; class IndexController extends AbstractActionController { // ... Konstruktor und weitere Actions /** * Redis-Nutzung demonstrieren. */ public function redisAction() { // Redis Storage-Instanz anlegen // ServBay Redis läuft auf 127.0.0.1:6379 $cache = StorageFactory::factory([ 'adapter' => [ 'name' => 'redis', 'options' => [ 'server' => [ 'host' => '127.0.0.1', 'port' => 6379, ], 'ttl' => 300, ], ], 'plugins' => [ 'serializer', 'exception_handler' => ['throw_exceptions' => false], ], ]); $cacheKey = 'my_redis_data'; $cachedData = $cache->getItem($cacheKey, $success); if (!$success) { $cachedData = 'Hello Redis! (Data from source, cached at ' . date('Y-m-d H:i:s') . ')'; $cache->setItem($cacheKey, $cachedData); $cachedData .= ' - CACHE MISS'; } else { $cachedData .= ' - CACHE HIT'; } return new ViewModel([ 'message' => $cachedData, ]); } }
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
55View anlegen
Datei
module/Application/view/application/index/redis.phtml
:php<h1>Redis Example</h1> <p><?php echo $this->message; ?></p>
1
2Beispiel aufrufen
Starten Sie den Redis-Dienst in ServBay. Rufen Sie
https://servbay-zend-test.local/redis
auf. Beim ersten Zugriff sehen Sie "CACHE MISS". Während der Cache-Laufzeit (300 Sekunden) wird bei erneuter Anfrage "CACHE HIT" angezeigt.
Zusammenfassung
Mit diesen Schritten haben Sie ein Zend Framework (Laminas) Projekt in der lokalen ServBay-Entwicklungsumgebung erfolgreich erstellt, konfiguriert und gestartet. Sie haben gelernt, wie Sie über die Websites-Funktion von ServBay den Webserver so einstellen, dass das öffentliche Verzeichnis als Root dient, und wie Sie die von ServBay bereitgestellten Datenbanken (MySQL, PostgreSQL) und Caches (Memcached, Redis) in Ihr Projekt integrieren.
ServBay vereinfacht die Einrichtung und Verwaltung von lokalen Entwicklungsumgebungen und ermöglicht so die Konzentration aufs Coden und die Projektumsetzung. Dank der umfangreichen Softwarepakete und flexiblen Konfigurationen in ServBay können Sie produktionsnahe lokale Entwicklungsumgebungen schaffen und Ihre Effizienz steigern.