Ein Zend Framework (Laminas) Projekt in ServBay erstellen und ausführen
Überblick
Das Zend Framework (heute Teil des Laminas Project) ist ein leistungsstarkes Open-Source-PHP-Framework, das eine Vielzahl hochwertiger, objektorientierter Komponenten bietet, um moderne Webanwendungen und Webservices zu entwickeln. Es überzeugt durch Flexibilität, modulare Architektur und Performance und eignet sich sowohl für einfache Websites als auch für komplexe Unternehmensanwendungen.
ServBay ist eine speziell für macOS und Windows konzipierte lokale Entwicklungsumgebung. Sie vereint PHP, verschiedene Webserver (z. B. Caddy, Nginx), Datenbanken (z. B. MySQL, PostgreSQL, MongoDB), Caching-Services (z. B. Redis, Memcached) und weitere Entwicklungstools unter einer benutzerfreundlichen Oberfläche. Mit ServBay können Sie diese Komponenten komfortabel verwalten und für Ihre lokalen PHP-Projekte konfigurieren.
In dieser Dokumentation erfahren Sie, wie Sie mit ServBay ein Zend Framework (Laminas) Projekt erstellen und ausführen und wie Sie die angebotenen Datenbank- und Caching-Services einbinden.
Voraussetzungen
Vor dem Einstieg stellen Sie bitte sicher, dass Sie folgende Schritte erledigt haben:
- ServBay installiert: Sie haben ServBay erfolgreich auf macOS oder Windows installiert und gestartet. Falls nicht, besuchen Sie die ServBay-Website für Download und Installationshinweise.
- Benötigte ServBay-Pakete: Prüfen Sie, ob die erforderlichen Komponenten in ServBay installiert und aktiv sind:
- Mindestens eine PHP-Version (empfohlene Version: PHP 8.x oder neuer, da aktuelle Laminas-Versionen eine moderne PHP-Version benötigen).
- Webserver wie Caddy oder Nginx.
- Composer (ist meist schon in ServBay verfügbar).
- Die gewünschten Datenbankservices (z. B. MySQL, PostgreSQL) und Caching-Services (z. B. Memcached, Redis). Über das ServBay-Dashboard lassen sich diese Dienste einfach starten.
Zend Framework Projekt erstellen
ServBay empfiehlt, Ihre Webprojekte in folgenden Verzeichnissen abzulegen, damit sie automatisch verwaltet und konfiguriert werden können:
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Wechsel ins Webverzeichnis
Öffnen Sie das Terminal und navigieren Sie zum empfohlenen Webverzeichnis von ServBay:
macOS:
bashcd /Applications/ServBay/www
1Windows:
cmdcd C:\ServBay\www
1Projekt mit Composer anlegen
Composer ist bereits in ServBay enthalten. Mit dem Befehl
create-project
legen Sie ein neues Zend Framework (Laminas Skeleton Application) Projekt im Unterordnerservbay-zend-app
an:bashcomposer create-project laminas/laminas-skeleton-application servbay-zend-app
1Damit wird die Skeleton-Anwendung inkl. aller Abhängigkeiten nach
servbay-zend-app
heruntergeladen.Wechsel ins Projektverzeichnis
Navigieren Sie ins neu erstellte Projekt:
bashcd servbay-zend-app
1
Webserver konfigurieren
Damit Sie Ihr Zend Framework-Projekt im Browser aufrufen können, muss dafür in ServBay eine Website angelegt werden.
- ServBay-Dashboard öffnen: Starten Sie ServBay.
- Webseiten-Einstellungen öffnen: Im ServBay-Dashboard zum Tab Websites wechseln.
- Neue Website hinzufügen: Über das
+
Symbol unten links eine neue Webseite anlegen. - Informationen eintragen:
- Name: Vergeben Sie einen sprechenden Namen, z. B.
My Zend Dev Site
. - Domain: Wählen Sie eine lokale Domain, etwa mit
.local
oder.test
als Endung, z. B.servbay-zend-test.local
. ServBay richtet die lokale DNS-Auflösung automatisch ein. - Website-Typ: Wählen Sie
PHP
. - PHP-Version: Wählen Sie die gewünschte Version (beispielsweise
8.3
). Achten Sie darauf, dass diese aktiv ist. - Document Root: Dies ist das Verzeichnis, das vom Webserver bereitgestellt wird. Das Entry-Script
index.php
liegt impublic
-Ordner Ihres Projekts:/Applications/ServBay/www/servbay-zend-app/public
.
- Name: Vergeben Sie einen sprechenden Namen, z. B.
- Speichern und neu starten: Klicken Sie auf Speichern und bestätigen Sie die Konfigurationsübernahme. Der Webserver lädt damit die neue Website-Konfiguration.
Eine ausführliche Schritt-für-Schritt-Anleitung finden Sie im Kapitel Erste Website hinzufügen der ServBay-Dokumentation.
Einfaches "Hello ServBay!" Beispiel
Als erstes ändern wir den Projektcode so, dass beim Aufruf der Startseite (/
) "Hello ServBay!" angezeigt wird.
Routes und Controller konfigurieren (module.config.php)
Bearbeiten Sie die Datei
module/Application/config/module.config.php
im Projektstamm. Diese sollte folgende Routing- und Controller-Definitionen enthalten: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 Routing-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: Dies ist ein Auszug aus der Konfiguraitonsdatei – fügen Sie die Definitionen in Ihre bestehende Konfiguration ein. Achten Sie darauf, dass die
'home'
Route und die Factory fürController\IndexController::class
vorhanden sind.Controller anlegen oder anpassen (IndexController.php)
Bearbeiten oder erstellen Sie die Datei
module/Application/src/Controller/IndexController.php
. Die MethodeindexAction
gibt eine ViewModel mit einer Nachricht zurück:php<?php declare(strict_types=1); namespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; class IndexController extends AbstractActionController { /** * Standard-Action für die Begrüßungsseite. */ public function indexAction() { // Gibt eine ViewModel zurück und übergibt die 'message' Variable an das 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 anlegen oder anpassen (index.phtml)
Bearbeiten oder erstellen Sie die Datei
module/Application/view/application/index/index.phtml
. Sie nimmt die vom Controller übergebenemessage
und zeigt sie an:php<h1><?php echo $this->message; ?></h1>
1Die Variable
$this->message
stammt dabei aus dem Controller und wird mithilfe des Laminas ViewHelpers angezeigt.
Website aufrufen
Öffnen Sie einen Webbrowser und besuchen Sie die konfigurierte Domain, z. B. https://servbay-zend-test.local
.
Erscheint die Nachricht Hello ServBay!
, funktioniert Ihre Zend Framework-Installation in ServBay korrekt.
Beispiele für Datenbank- und Cache-Integration
ServBay stellt verschiedene Datenbank- und Cache-Dienste bereit. Folgende Beispiele zeigen, wie Sie in Laminas Memcached, Redis, MySQL und PostgreSQL anbinden.
Hinweis: Die nachfolgenden Beispiele sind Einzel-Demonstrationen. In echten Projekten wählen Sie typischerweise einen Datenbank- und einen oder mehrere Cache-Services, die Sie per Dependency Injection verwalten. Alle Beispiele funktionieren nur, wenn die jeweiligen Dienste in ServBay laufen (MySQL, PostgreSQL, Memcached, Redis).
Datenbank-Interaktion – Tabelle anlegen
Zunächst zeigen wir, wie Sie mit Laminas DB eine einfache Tabelle erzeugen und mit SQL-Befehlen arbeiten – ohne Laminas-eigene Migrationstools.
Laminas DB installieren
Fügen Sie im Projektverzeichnis das Laminas DB Paket hinzu:
bashcomposer require laminas/laminas-db
1Datenbank manuell anlegen
Legen Sie in Ihrem Datenbankdienst (z. B. MySQL/MariaDB oder PostgreSQL) eine Datenbank namens
servbay_zend_app
an – etwa mit phpMyAdmin, pgAdmin oder MongoDB Compass über das ServBay-Dashboard. Voreingestellt sind die ServBay-Zugangsdaten:- MySQL/MariaDB: Benutzer
root
, Passwortpassword
- PostgreSQL: Benutzer
root
, Passwortpassword
- MySQL/MariaDB: Benutzer
Tabelle per PHP-Skript anlegen (Beispiel-Script)
Erstellen Sie ein PHP-Skript (zum Beispiel
create_users_table.php
im Projekt oder an einem temporären Ort) mit folgendem Inhalt:php<?php // create_users_table.php use Laminas\Db\Adapter\Adapter; use Laminas\Db\Sql\Sql; // Beispiel für MySQL/MariaDB $adapter = new Adapter([ 'driver' => 'Pdo_Mysql', // Oder 'Pdo_Pgsql' 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', // ServBay Standardpasswort 'hostname' => '127.0.0.1', // 'port' => 3306, // Standard für MySQL // 'port' => 5432, // Standard für PostgreSQL ]); $sql = new Sql($adapter); // SQL für die Tabelle 'users' definieren $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: Dies ist eine vereinfachte Skript-Lösung. In Produktivprojekten verwenden Sie besser die Laminas-eigenen Migrationstools für Schema-Versionierung.
Ausführen können Sie das Script via Terminal:
bashphp create_users_table.php
1
Beispiel-Integration MySQL
Hier sehen Sie, wie Sie in einem Zend Framework-Controller mit MySQL kommunizieren.
Datenbank-Konfiguration einrichten
Tragen Sie in
config/autoload/global.php
die MySQL-Zugangsdaten ein:php<?php // config/autoload/global.php return [ 'db' => [ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', // Die existierende Datenbank 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', 'port' => 3306, 'charset' => 'utf8mb4', ], // ... weitere globale Konfigurationen ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14Controller Factory konfigurieren (module.config.php)
Um
Laminas\Db\Adapter\Adapter
in den Controller zu injecten, ersetzen Sie gegebenenfalls dieInvokableFactory
für denIndexController
inmodule/Application/config/module.config.php
durch die folgende Factory:php<?php // module/Application/config/module.config.php namespace Application; use Laminas\ServiceManager\Factory\InvokableFactory; // nur falls anderswo benötigt use Laminas\Db\Adapter\AdapterInterface; // hinzufügen return [ // ... weitere Einstellungen 'controllers' => [ 'factories' => [ Controller\IndexController::class => function($container) { $adapter = $container->get(AdapterInterface::class); return new Controller\IndexController($adapter); }, ], ], 'service_manager' => [ 'aliases' => [ AdapterInterface::class => 'Laminas\Db\Adapter\Adapter', ], 'factories' => [ 'Laminas\Db\Adapter\Adapter' => \Laminas\Db\Adapter\AdapterServiceFactory::class, ], ], // ... weitere Einstellungen ];
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
27Hinweis: Fügen Sie diese Definitionen Ihrer bestehenden Konfiguration hinzu und achten Sie auf die korrekten Alias- und Factory-Einstellungen.
Routes für MySQL Beispiel konfigurieren (module.config.php)
Ergänzen Sie in
module/Application/config/module.config.php
zwei neue Routen:php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; // ... weitere use-Statements 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
34
35Controller Methoden hinzufügen (IndexController.php)
Ergänzen Sie das File
module/Application/src/Controller/IndexController.php
um einen Konstruktor für Adapter-Injection sowie um die MethodenmysqlAddAction
undmysqlAction
: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; } /** * Standard-Action für die Begrüßungsseite. */ public function indexAction() { return new ViewModel([ 'message' => 'Hello ServBay!', ]); } /** * Fügt einen Benutzer zur Tabelle 'users' über MySQL hinzu. */ public function mysqlAddAction() { $sql = new Sql($this->adapter); $insert = $sql->insert('users') ->values([ 'name' => 'ServBay Demo User', 'email' => 'demo-mysql@servbay.test', ]); $statement = $sql->prepareStatementForSqlObject($insert); $result = $statement->execute(); $message = $result->getAffectedRows() > 0 ? 'MySQL User erfolgreich hinzugefügt.' : 'Fehler beim Hinzufügen des MySQL Users.'; return new ViewModel([ 'message' => $message, ]); } /** * Listet alle Benutzer aus der 'users'-Tabelle via MySQL auf. */ 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; } return new ViewModel([ 'users' => json_encode($users, JSON_PRETTY_PRINT), ]); } // ... weitere 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
75Views anlegen
Legen Sie die Datei
module/Application/view/application/index/mysql-add.phtml
an:php<h1><?php echo $this->message; ?></h1>
1Und die Datei
module/Application/view/application/index/mysql.phtml
:php<h1>MySQL Users</h1> <pre><?php echo $this->users; ?></pre>
1
2Beispiele aufrufen
Stellen Sie sicher, dass MySQL in ServBay läuft. Rufen Sie zuerst
https://servbay-zend-test.local/mysql-add
auf, um einen Datensatz einzufügen. Danach unterhttps://servbay-zend-test.local/mysql
die gespeicherten User als JSON ansehen.
Beispiel-Integration PostgreSQL
Hier sehen Sie, wie Ihr Controller mit PostgreSQL arbeitet.
Datenbank-Konfiguration einrichten
Ersetzen Sie für den PostgreSQL-Test in der Datei
config/autoload/global.php
das'db'
Array wie folgt: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, ], // ... weitere globale Konfigurationen ];
1
2
3
4
5
6
7
8
9
10
11
12
13Controller Factory konfigurieren (module.config.php)
Gleiche Anpassung wie beim MySQL-Beispiel – falls bereits umgesetzt, keine weiteren Änderungen nötig.
Routes für PostgreSQL Beispiel 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' => [ // ... existierende Routen '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 Einstellungen ];
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 hinzufügen (IndexController.php)
Fügen Sie die folgenden Methoden hinzu:
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 Actions /** * Fügt einen Benutzer via PostgreSQL hinzu. */ public function pgsqlAddAction() { $sql = new Sql($this->adapter); $insert = $sql->insert('users') ->values([ 'name' => 'ServBay Demo User', 'email' => 'demo-pgsql@servbay.test', ]); $statement = $sql->prepareStatementForSqlObject($insert); $result = $statement->execute(); $message = $result->getAffectedRows() > 0 ? 'PostgreSQL User erfolgreich hinzugefügt.' : 'Fehler beim Hinzufügen des PostgreSQL Users.'; return new ViewModel([ 'message' => $message, ]); } /** * Listet alle Benutzer aus der 'users'-Tabelle via PostgreSQL auf. */ 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; } 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
65Views anlegen
Für
pgsql-add
:module/Application/view/application/index/pgsql-add.phtml
php<h1><?php echo $this->message; ?></h1>
1Für
pgsql
:module/Application/view/application/index/pgsql.phtml
php<h1>PostgreSQL Users</h1> <pre><?php echo $this->users; ?></pre>
1
2Beispiele aufrufen
Stellen Sie sicher, dass PostgreSQL aktiv ist. Besuchen Sie zur User-Anlage
https://servbay-zend-test.local/pgsql-add
und zur Anzeige aller Userhttps://servbay-zend-test.local/pgsql
.
Beispiel-Integration Memcached
So nutzen Sie Memcached für Caching im Controller.
Memcached-Adapter installieren
In Ihrer
composer.json
ergänzen Sie:json// composer.json { "require": { "laminas/laminas-skeleton-application": "^1.0", "laminas/laminas-cache-storage-adapter-memcached": "^2.0" }, }
1
2
3
4
5
6
7Anschließend Dependencies aktualisieren:
bashcomposer update
1Das Paket für das PHP-
memcached
Modul ist in ServBay bereits vorinstalliert.Route für Memcached Beispiel (module.config.php)
php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; return [ 'router' => [ 'routes' => [ // ... weitere Routen 'memcached' => [ 'type' => Literal::class, 'options' => [ 'route' => '/memcached', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'memcached', ], ], ], ], ], // ... weitere Einstellungen ];
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 für Memcached (IndexController.php)
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 Methoden /** * Beispiel für Memcached-Nutzung. */ public function memcachedAction() { // Erstellt Memcached Storage Instanz // Standard-Server in ServBay: 127.0.0.1:11211 $cache = StorageFactory::factory([ 'adapter' => [ 'name' => 'memcached', 'options' => [ 'servers' => [ ['127.0.0.1', 11211], ], 'ttl' => 300, ], ], 'plugins' => [ 'serializer', 'exception_handler' => ['throw_exceptions' => false], ], ]); $cacheKey = 'my_memcached_data'; $cachedData = $cache->getItem($cacheKey, $success); if (!$success) { $cachedData = 'Hello Memcached! (Daten aus der Quelle, gespeichert am ' . 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
54View anlegen
module/Application/view/application/index/memcached.phtml
:php<h1>Memcached Beispiel</h1> <p><?php echo $this->message; ?></p>
1
2Beispiel aufrufen
Aktivieren Sie Memcached in ServBay und rufen Sie
https://servbay-zend-test.local/memcached
auf. Beim ersten Zugriff sehen Sie "CACHE MISS", bei Folgezugriffen innerhalb der Gültigkeit "CACHE HIT" (Zeitstempel bleibt gleich).
Beispiel-Integration Redis
So binden Sie Redis als Cache im Controller ein.
Redis-Adapter installieren
Sie ergänzen in Ihrer
composer.json
: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
1Das PHP-Redis-Extension ist in ServBay enthalten.
Route für Redis Beispiel (module.config.php)
php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; return [ 'router' => [ 'routes' => [ // ... weitere Routen 'redis' => [ 'type' => Literal::class, 'options' => [ 'route' => '/redis', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'redis', ], ], ], ], ], // ... weitere Einstellungen ];
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 für Redis (IndexController.php)
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 andere Methoden /** * Redis-Beispielanzeige. */ public function redisAction() { // ServBay Redis läuft standardmäßig auf 127.0.0.1:6379 $cache = StorageFactory::factory([ 'adapter' => [ 'name' => 'redis', 'options' => [ 'server' => [ 'host' => '127.0.0.1', 'port' => 6379, // 'database' => 0, // 'password' => null, ], 'ttl' => 300, ], ], 'plugins' => [ 'serializer', 'exception_handler' => ['throw_exceptions' => false], ], ]); $cacheKey = 'my_redis_data'; $cachedData = $cache->getItem($cacheKey, $success); if (!$success) { $cachedData = 'Hello Redis! (Daten aus der Quelle, gespeichert am ' . 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
55
56View anlegen
module/Application/view/application/index/redis.phtml
:php<h1>Redis Beispiel</h1> <p><?php echo $this->message; ?></p>
1
2Beispiel aufrufen
Prüfen Sie, ob Redis in ServBay läuft. Unter
https://servbay-zend-test.local/redis
sehen Sie zunächst "CACHE MISS", dann "CACHE HIT".
Fazit
Sie haben gelernt, wie man ein Zend Framework (Laminas) Projekt mit ServBay aufsetzt und betreibt. Sie können den Webserver für Ihr Projekt konfigurieren und sowohl MySQL, PostgreSQL als auch Memcached und Redis als Datenbank- und Caching-Services einbinden.
ServBay erleichtert den Aufbau und die Verwaltung lokaler Entwicklungsumgebungen, sodass Sie sich ganz auf die Programmierung und Umsetzung Ihrer Projekte konzentrieren können. Dank der Vielzahl an integrierten Paketen und flexiblen Konfigurationsmöglichkeiten können Sie nah am Produktionssystem entwickeln und Ihre Effizienz steigern.