Creazione ed esecuzione di un progetto Zend Framework (Laminas) in ServBay
Panoramica
Zend Framework (ora parte del progetto Laminas) è un potente framework PHP open source che mette a disposizione una gamma di componenti di alta qualità orientati agli oggetti per la creazione di applicazioni e servizi web moderni. Apprezzato per la sua flessibilità, architettura modulare e alte prestazioni, rappresenta una scelta ideale sia per siti semplici che per soluzioni enterprise complesse.
ServBay è un ambiente di sviluppo web locale progettato per macOS che integra PHP, diversi server web (come Caddy e Nginx), database (come MySQL, PostgreSQL, MongoDB) e servizi di cache (come Redis e Memcached), oltre ad altri strumenti utili. ServBay offre un modo semplice per configurare e gestire questi software, rendendo l’installazione e l’esecuzione locale di qualsiasi progetto PHP rapidissima.
Questa documentazione ti guiderà passo passo nella creazione e nell’esecuzione di un progetto Zend Framework (Laminas) in ServBay, illustrando come integrare i servizi di database e cache forniti dalla piattaforma.
Prerequisiti
Prima di iniziare, assicurati di aver completato questi step:
- Installazione di ServBay: ServBay deve già essere installato e funzionante su macOS. In caso contrario, visita il sito ufficiale di ServBay per consigli e istruzioni sull’installazione.
- Pacchetti necessari installati in ServBay: Verifica che siano presenti e attivi:
- Almeno una versione di PHP (consigliata 8.x o superiore, poiché le versioni moderne di Zend Framework / Laminas lo richiedono).
- Un server web (Caddy o Nginx).
- Composer (solitamente è preinstallato in ServBay).
- I servizi database e cache che intendi utilizzare (es. MySQL, PostgreSQL, Memcached, Redis). Puoi avviare questi servizi dal pannello di controllo di ServBay.
Creazione di un progetto Zend Framework
ServBay consiglia di salvare tutti i progetti web nella cartella /Applications/ServBay/www
per una gestione e configurazione automatica ottimale.
Accedi alla root dei siti web
Apri il terminale e posizionati nella cartella raccomandata:
bashcd /Applications/ServBay/www
1Crea il progetto tramite Composer
Composer è già fornito da ServBay. Usa il comando
create-project
per generare una nuova skeleton application Laminas/Zend Framework. Il progetto sarà creato nella sottocartellaservbay-zend-app
:bashcomposer create-project laminas/laminas-skeleton-application servbay-zend-app
1Questo scaricherà lo scheletro dell’applicazione Laminas in
servbay-zend-app
e installerà tutte le dipendenze necessarie.Accedi alla cartella del progetto
Naviga dentro la cartella appena creata:
bashcd servbay-zend-app
1
Configurazione del server web
Per accedere al progetto Zend Framework dal browser, occorre configurare un sito in ServBay.
- Apri il Pannello di controllo ServBay: Avvia l’applicazione ServBay.
- Vai alle impostazioni dei siti: Nel pannello di ServBay, cerca e clicca sulla scheda Siti web (Websites).
- Aggiungi un nuovo sito: Clicca sul pulsante
+
in basso a sinistra per aggiungere una nuova configurazione. - Compila i dati del sito:
- Nome (Name): Dai un nome riconoscibile al sito, ad esempio
My Zend Dev Site
. - Dominio (Domain): Scegli il dominio che desideri usare nel browser. Per evitare conflitti con domini reali, si suggerisce una terminazione
.local
o.test
, comeservbay-zend-test.local
. ServBay configurerà automaticamente la risoluzione DNS locale. - Tipo sito (Website Type): Seleziona
PHP
. - Versione PHP (PHP Version): Scegli la versione PHP desiderata, ad esempio
8.3
. Assicurati che questa versione sia installata e attiva in ServBay. - Root del sito (Document Root): Deve puntare alla cartella
public
del tuo progetto, dato che lì si trovaindex.php
. Imposta quindi:/Applications/ServBay/www/servbay-zend-app/public
.
- Nome (Name): Dai un nome riconoscibile al sito, ad esempio
- Salva e riavvia: Clicca su Salva (Save). ServBay ti chiederà conferma per applicare le modifiche, e il server web ricaricherà automaticamente la configurazione del nuovo sito.
Per dettagli sulla configurazione, consulta la sezione Aggiungi il primo sito della documentazione ServBay.
Esempio base "Hello ServBay!"
Vediamo ora come modificare il progetto affinché l’URL radice (/
) mostri il messaggio "Hello ServBay!".
Configura routing e controller (module.config.php)
Modifica
module/Application/config/module.config.php
. Assicurati che ci siano queste configurazioni per routing e controller: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', ], ], ], // ... altre configurazioni di routing ], ], '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', ], ], // ... altre configurazioni ];
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
49Nota: Il blocco mostra solo una parte di
module.config.php
; amalgamalo con la configurazione esistente. Verifica la presenza della rotta'home'
e della factory perController\IndexController::class
.Crea o modifica il controller (IndexController.php)
Modifica o crea
module/Application/src/Controller/IndexController.php
e assicurati che il metodoindexAction
restituisca una ViewModel con il messaggio:php<?php declare(strict_types=1); namespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; class IndexController extends AbstractActionController { /** * Azione predefinita per mostrare la pagina di benvenuto. */ public function indexAction() { // Restituisce una ViewModel e passa la variabile 'message' alla view return new ViewModel([ 'message' => 'Hello ServBay!', ]); } // ... altri metodi action }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24Crea o modifica il file di view (index.phtml)
Modifica o crea
module/Application/view/application/index/index.phtml
, che riceverà la variabilemessage
dal controller:php<h1><?php echo $this->message; ?></h1>
1In questo modo usi l’helper di view di Laminas/Zend per mostrare i dati passati dal controller.
Accesso al sito web
Apri il browser e visita il dominio configurato (ad esempio https://servbay-zend-test.local
).
Se tutto è configurato correttamente, apparirà la scritta Hello ServBay!
, segno che il progetto Zend Framework è partito con successo in ServBay.
Esempi di integrazione database e cache
ServBay offre molti servizi database e cache. Ecco come collegare ed usare Memcached, Redis, MySQL e PostgreSQL in un progetto Zend Framework.
Importante: Gli esempi seguenti sono presentazioni indipendenti. In una reale applicazione, normalmente adotterai una sola combinazione tra database e uno o più servizi cache, gestendo le connessioni tramite dependency injection e altri pattern. Per eseguire questi esempi, assicurati che i relativi servizi (MySQL, PostgreSQL, Memcached, Redis) siano attivi in ServBay.
Esempio d’interazione con database – Creazione di una tabella
Vediamo l’utilizzo del componente Laminas DB per interagire con il database e creare una tabella. Questa procedura mostra come definire ed eseguire manualmente la creazione di una tabella, invece di affidarsi agli strumenti ufficiali di migration.
Installa il componente Laminas DB
Nel terminale dalla root del progetto:
bashcomposer require laminas/laminas-db
1Crea manualmente il database
Prima di continuare, crea manualmente un database chiamato
servbay_zend_app
usando gli strumenti di amministrazione database forniti da ServBay (es. phpMyAdmin, pgAdmin, MongoDB Compass, ecc). Per MySQL/MariaDB username e password predefiniti sonoroot
epassword
. Per PostgreSQL gli stessi dati.Definisci ed esegui lo script per la tabella (esempio)
Crea un file PHP, ad esempio
create_users_table.php
(nella root del progetto o in una posizione temporanea), con il seguente contenuto:php<?php // create_users_table.php use Laminas\Db\Adapter\Adapter; use Laminas\Db\Sql\Sql; // Supponiamo di usare MySQL o MariaDB $adapter = new Adapter([ 'driver' => 'Pdo_Mysql', // oppure 'Pdo_Pgsql' 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', // Password predefinita ServBay 'hostname' => '127.0.0.1', // 'port' => 3306, // Porta MySQL // 'port' => 5432, // Porta PostgreSQL ]); $sql = new Sql($adapter); // Definizione tabella 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 "Esecuzione SQL:\n"; echo $sql->buildSqlString($create, $adapter->getPlatform()) . "\n"; try { // Esecuzione SQL $adapter->query( $sql->buildSqlString($create, $adapter->getPlatform()), Adapter::QUERY_MODE_EXECUTE ); echo "Tabella 'users' creata con successo.\n"; } catch (\Exception $e) { echo "Errore nella creazione della tabella: " . $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
38Nota: Lo script è da eseguire manualmente. In un vero progetto si userebbe Laminas Migrations per gestire la versione dello schema.
Esegui il file da terminale:
bashphp create_users_table.php
1
Esempio di integrazione MySQL
Vediamo come collegare e interrogare MySQL dal controller Zend Framework.
Configura la connessione al database
Modifica
config/autoload/global.php
con questi dati (modifica o inserisci la chiavedb
):php<?php // config/autoload/global.php return [ 'db' => [ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', 'username' => 'root', // Username di default ServBay 'password' => 'password', // Password di default ServBay 'hostname' => '127.0.0.1', 'port' => 3306, 'charset' => 'utf8mb4', ], // ... altre configurazioni globali ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14Configura la factory per il controller (module.config.php)
Per iniettare
Laminas\Db\Adapter\Adapter
nel controller, definisci la factory perIndexController
inmodule/Application/config/module.config.php
. Se già usiInvokableFactory
, sostituiscila con questa:php<?php // module/Application/config/module.config.php namespace Application; use Laminas\ServiceManager\Factory\InvokableFactory; use Laminas\Db\Adapter\AdapterInterface; return [ // ... altre configurazioni '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, ], ], // ... altre configurazioni ];
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
27Nota: Amalgama questa configurazione con quella pre-esistente. Assicurati che siano presenti sia l’alias di
AdapterInterface
che la factory diLaminas\Db\Adapter\Adapter
.Configura il routing (module.config.php)
Aggiungi nuove rotte per gli esempi MySQL in
module/Application/config/module.config.php
:php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; return [ 'router' => [ 'routes' => [ // ... rotte esistenti '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', ], ], ], ], ], // ... altre configurazioni ];
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
34Aggiungi i metodi al controller (IndexController.php)
Modifica
module/Application/src/Controller/IndexController.php
, aggiungendo il costruttore per l’iniezione diAdapter
e le action dedicate: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; } /** * Azione di default. */ public function indexAction() { return new ViewModel([ 'message' => 'Hello ServBay!', ]); } /** * Action per inserire un utente nella tabella users tramite MySQL. */ public function mysqlAddAction() { $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 ? 'Utente MySQL aggiunto con successo.' : 'Inserimento utente MySQL fallito.'; return new ViewModel([ 'message' => $message, ]); } /** * Action per ottenere tutti gli utenti dalla tabella via MySQL. */ 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), ]); } }
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
73Crea i template di view
Crea
module/Application/view/application/index/mysql-add.phtml
:php<h1><?php echo $this->message; ?></h1>
1Crea
module/Application/view/application/index/mysql.phtml
:php<h1>MySQL Users</h1> <pre><?php echo $this->users; ?></pre>
1
2Usa l’esempio MySQL
Assicurati che il servizio MySQL sia attivo in ServBay. Visita prima
https://servbay-zend-test.local/mysql-add
per aggiungere un nuovo utente. Dovresti vedere il messaggio di conferma. Poi visitahttps://servbay-zend-test.local/mysql
per vedere l’elenco utenti (users
) in formato JSON.
Esempio di integrazione PostgreSQL
Collegamento e query PostgreSQL da un controller Zend Framework.
Configura la connessione al database
Modifica
config/autoload/global.php
per PostgreSQL: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, ], // ... altre configurazioni ];
1
2
3
4
5
6
7
8
9
10
11
12
13Configura la factory per il controller (module.config.php)
(Come nel caso MySQL) Assicurati che in
module.config.php
vi siano le factory/alias perIndexController
eAdapterInterface
.Configura il routing (module.config.php)
Aggiungi le nuove rotte PostgreSQL in
module/Application/config/module.config.php
:php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; return [ 'router' => [ 'routes' => [ // ... altre rotte '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', ], ], ], ], ], // ... altre configurazioni ];
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
34Aggiungi i metodi al controller (IndexController.php)
Modifica
module/Application/src/Controller/IndexController.php
, aggiungendo i seguenti metodi: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; } // ... action esistenti /** * Action per inserire un utente con PostgreSQL. */ 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 ? 'Utente PostgreSQL aggiunto con successo.' : 'Inserimento utente PostgreSQL fallito.'; return new ViewModel([ 'message' => $message, ]); } /** * Action per ottenere tutti gli utenti dalla tabella via PostgreSQL. */ 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
65Crea i template di view
Crea
module/Application/view/application/index/pgsql-add.phtml
:php<h1><?php echo $this->message; ?></h1>
1Crea
module/Application/view/application/index/pgsql.phtml
:php<h1>PostgreSQL Users</h1> <pre><?php echo $this->users; ?></pre>
1
2Usa l’esempio PostgreSQL
Assicurati che il servizio PostgreSQL sia attivo in ServBay. Visita
https://servbay-zend-test.local/pgsql-add
, quindihttps://servbay-zend-test.local/pgsql
per vedere la lista utenti.
Esempio di integrazione Memcached
Utilizzo di Memcached in un controller Zend Framework per la cache dati.
Installa l’adapter Memcached
Aggiungi nel
composer.json
:json// composer.json { "require": { "laminas/laminas-skeleton-application": "^1.0", "laminas/laminas-cache-storage-adapter-memcached": "^2.0" } }
1
2
3
4
5
6
7Poi:
bashcomposer update
1L’estensione PHP
memcached
è già presente in ServBay.Configura il routing (module.config.php)
Aggiungi una rotta chiamata
memcached
inmodule/Application/config/module.config.php
:php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; return [ 'router' => [ 'routes' => [ // ... altre rotte 'memcached' => [ 'type' => Literal::class, 'options' => [ 'route' => '/memcached', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'memcached', ], ], ], ], ], // ... altre configurazioni ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24Aggiungi il metodo al controller (IndexController.php)
Modifica
module/Application/src/Controller/IndexController.php
aggiungendo: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 { // ... altre action/metodi /** * Esempio di utilizzo di Memcached. */ public function memcachedAction() { // Memcached gira su 127.0.0.1:11211 in ServBay $cache = StorageFactory::factory([ 'adapter' => [ 'name' => 'memcached', 'options' => [ 'servers' => [ ['127.0.0.1', 11211], ], 'ttl' => 300, // 300 secondi di cache ], ], 'plugins' => [ 'serializer', 'exception_handler' => ['throw_exceptions' => false], ], ]); $cacheKey = 'my_memcached_data'; $cachedData = $cache->getItem($cacheKey, $success); if (!$success) { $cachedData = 'Hello Memcached! (Dati dalla sorgente, memorizzati alle ' . 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
53Crea il template di view
Crea
module/Application/view/application/index/memcached.phtml
:php<h1>Esempio Memcached</h1> <p><?php echo $this->message; ?></p>
1
2Usa l’esempio Memcached
Avvia il servizio Memcached in ServBay, poi visita
https://servbay-zend-test.local/memcached
. Alla prima visita compare "CACHE MISS", nelle successive entro 300 secondi "CACHE HIT" (dati recuperati dalla cache).
Esempio di integrazione Redis
Uso di Redis come servizio di cache o storage in un controller di Zend Framework.
Installa l’adapter Redis
Aggiungi a
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
8Poi esegui:
bashcomposer update
1L’estensione
redis
è già presente in ServBay.Configura il routing (module.config.php)
Aggiungi la rotta
redis
inmodule/Application/config/module.config.php
:php<?php // module/Application/config/module.config.php namespace Application; use Laminas\Router\Http\Literal; return [ 'router' => [ 'routes' => [ // ... altre rotte 'redis' => [ 'type' => Literal::class, 'options' => [ 'route' => '/redis', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'redis', ], ], ], ], ], // ... altre configurazioni ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24Aggiungi il metodo al controller (IndexController.php)
Modifica
module/Application/src/Controller/IndexController.php
aggiungendo: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 { // ... altre action/metodi /** * Esempio di utilizzo di Redis. */ public function redisAction() { // Redis gira su 127.0.0.1:6379 in ServBay $cache = StorageFactory::factory([ 'adapter' => [ 'name' => 'redis', 'options' => [ 'server' => [ 'host' => '127.0.0.1', 'port' => 6379, ], 'ttl' => 300, // 300 secondi di cache ], ], 'plugins' => [ 'serializer', 'exception_handler' => ['throw_exceptions' => false], ], ]); $cacheKey = 'my_redis_data'; $cachedData = $cache->getItem($cacheKey, $success); if (!$success) { $cachedData = 'Hello Redis! (Dati dalla sorgente, memorizzati alle ' . 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
54Crea il template di view
Crea
module/Application/view/application/index/redis.phtml
:php<h1>Esempio Redis</h1> <p><?php echo $this->message; ?></p>
1
2Usa l’esempio Redis
Avvia il servizio Redis in ServBay e visita
https://servbay-zend-test.local/redis
. Alla prima visita comparirà "CACHE MISS", mentre nelle richieste successive (entro 300 secondi) "CACHE HIT".
Riepilogo
Seguendo questa guida hai creato, configurato ed eseguito un progetto Zend Framework (Laminas) nell’ambiente locale ServBay. Hai imparato come:
- configurare un sito web per indirizzare il server web alla cartella pubblica del progetto;
- integrare e utilizzare i database MySQL e PostgreSQL;
- utilizzare servizi di cache come Memcached e Redis offerti da ServBay.
ServBay rende la creazione e la gestione degli ambienti di sviluppo locale un processo semplice e rapido, permettendoti di concentrarti sul codice e sulla crescita del progetto. Sfrutta la ricchezza di pacchetti e le opzioni di configurazione di ServBay per replicare con facilità l’ambiente di produzione e ottimizzare il tuo workflow di sviluppo in locale.