Creazione ed Esecuzione di un Progetto Zend Framework
Cos'è Zend Framework?
Zend Framework è un framework PHP open source che offre una serie di librerie orientate agli oggetti per costruire moderne applicazioni e servizi Web. È noto per il suo design modulare e alte prestazioni, rendendolo adatto per costruire applicazioni aziendali di piccole e grandi dimensioni.
Caratteristiche principali e vantaggi di Zend Framework
- Design modulare: Zend Framework adotta un design modulare che consente agli sviluppatori di scegliere e utilizzare i componenti di cui hanno bisogno.
- Alte prestazioni: grazie a un'architettura ottimizzata e a meccanismi di caching, Zend Framework offre prestazioni eccezionali.
- Flessibilità: può integrare una varietà di librerie e estensioni di terze parti, adatto a progetti di ogni dimensione.
- Supporto della comunità: ha una vasta comunità di sviluppatori e un ricco ecosistema.
- Buona documentazione: fornisce una documentazione dettagliata e tutorial per aiutare gli sviluppatori a iniziare rapidamente.
Zend Framework è adatto per costruire applicazioni Web e API di alta qualità, adatto a progetti che vanno dalle piccole applicazioni ai grandi sistemi aziendali.
Creazione ed Esecuzione di un Progetto Zend Framework con ServBay
In questo articolo, useremo l'ambiente PHP offerto da ServBay per creare ed eseguire un progetto Zend Framework. Utilizzeremo la funzione 'host' di ServBay per configurare il server Web e accedere al progetto con una semplice configurazione.
Attenzione: se sei un utente di NGINX o Apache
ServBay utilizza Caddy come server Web di default. Per gli utenti che migrano da NGINX e Apache a ServBay, ci sono alcuni punti di cambiamento da considerare:
Configurazione di Caddy
ServBay ha Caddy integrato e preconfigurato. Gli sviluppatori possono gestire i siti tramite la funzione 'host' di ServBay senza dover modificare manualmente il file di configurazione di Caddy.
Regole di Rewrite e .htaccess
Con NGINX e Apache, gli sviluppatori scrivono spesso le regole di Rewrite e i file .htaccess per gestire gli URL rewriting e altre configurazioni. Tuttavia, ServBay viene fornito con le regole di Caddy preconfigurate, quindi, a meno che non ci siano esigenze particolari, gli sviluppatori non devono scrivere queste regole.
Scoprire di più
Per ulteriori informazioni, consultare Rewrite e htaccess, Come migrare un sito Apache a ServBay, Come migrare un sito NGINX a ServBay.
Creazione di un Progetto Zend Framework
TIP
ServBay consiglia agli sviluppatori di posizionare i siti Web nella directory /Applications/ServBay/www
per facilitare la gestione.
Installare Composer
ServBay viene fornito con Composer preinstallato, quindi non è necessario installarlo separatamente.
Creare un Progetto Zend Framework
Utilizzare Composer per creare un nuovo progetto Zend Framework:
bashcd /Applications/ServBay/www mkdir servbay-zend-app cd servbay-zend-app composer create-project zendframework/skeleton-application .
1
2
3
4Entrare nella Directory del Progetto
Entrare nella directory del nuovo progetto Zend Framework:
bashcd /Applications/ServBay/www/servbay-zend-app
1
Configurazione Iniziale
Configurare le Variabili d'Ambiente
Configurare le informazioni di connessione al database e altre variabili d'ambiente nel file
config/autoload/global.php
. Assicurarsi che la configurazione sia simile a questa:phpreturn [ 'db' => [ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', ], ];
1
2
3
4
5
6
7
8
9
Configurare il Server Web
Utilizzare la funzione 'host' di ServBay per accedere al progetto Zend Framework tramite il server Web. Nella configurazione dell'host di ServBay, aggiungere un nuovo host:
- Nome:
My First Zend Dev Site
- Dominio:
servbay-zend-test.local
- Tipo di sito Web:
PHP
- Versione PHP: scegliere
8.3
- Directory root del sito Web:
/Applications/ServBay/www/servbay-zend-app/public
Per ulteriori dettagli, consultare Aggiungere il primo sito web.
Aggiungere Codice di Esempio
Aggiungere il seguente codice nel file module/Application/config/module.config.php
per visualizzare "Hello ServBay!":
return [
'router' => [
'routes' => [
'home' => [
'type' => 'Literal',
'options' => [
'route' => '/',
'defaults' => [
'controller' => 'Application\Controller\Index',
'action' => 'index',
],
],
],
],
],
'controllers' => [
'factories' => [
'Application\Controller\Index' => InvokableFactory::class,
],
],
'view_manager' => [
'template_path_stack' => [
__DIR__ . '/../view',
],
],
];
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
Aggiungere il seguente codice nel file module/Application/src/Controller/IndexController.php
:
namespace Application\Controller;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
class IndexController extends AbstractActionController
{
public function indexAction()
{
return new ViewModel([
'message' => 'Hello ServBay!',
]);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
Aggiungere il seguente codice nel file module/Application/view/application/index/index.phtml
:
<?php echo $this->message; ?>
Accedere al Sito Web
Aprire il browser e visitare https://servbay-zend-test.local
, dove vedrete la pagina che visualizza Hello ServBay!
.
Esempio di Database NoSQL
Esempio di Memcached
Installare l'Estensione Memcached
In ServBay, l'estensione Memcached è preinstallata, quindi non sono necessarie installazioni aggiuntive.
Configurare Memcached
Aggiungere la dipendenza di Memcached nel file
composer.json
:json{ "require": { "laminas/laminas-cache-storage-adapter-memcached": "^2.0" } }
1
2
3
4
5Poi eseguire
composer update
per installare le dipendenze.Configurare le Rotte
Aggiungere il seguente codice nel file
module/Application/config/module.config.php
:phpreturn [ 'router' => [ 'routes' => [ 'memcached' => [ 'type' => 'Literal', 'options' => [ 'route' => '/memcached', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'memcached', ], ], ], ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16Usare Memcached
Utilizzare il caching nel controller:
phpnamespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Cache\StorageFactory; class IndexController extends AbstractActionController { public function memcachedAction() { $cache = StorageFactory::factory([ 'adapter' => [ 'name' => 'memcached', 'options' => [ 'servers' => [ ['127.0.0.1', 11211], ], ], ], ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->getItem($cacheKey, $success); if (!$success) { $cachedData = 'Hello Memcached!'; $cache->setItem($cacheKey, $cachedData); } 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
34Aggiungere il seguente codice nel file
module/Application/view/application/index/memcached.phtml
:php<?php echo $this->message; ?>
1Aprire il browser e accedere a
https://servbay-zend-test.local/memcached
Esempio di Redis
Installare l'Estensione Redis
In ServBay, l'estensione Redis è preinstallata, quindi non sono necessarie installazioni aggiuntive.
Configurare Redis
Aggiungere la dipendenza di Redis nel file
composer.json
:json{ "require": { "laminas/laminas-cache-storage-adapter-redis": "^2.0" } }
1
2
3
4
5Poi eseguire
composer update
per installare le dipendenze.Configurare le Rotte
Aggiungere il seguente codice nel file
module/Application/config/module.config.php
:phpreturn [ 'router' => [ 'routes' => [ 'redis' => [ 'type' => 'Literal', 'options' => [ 'route' => '/redis', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'redis', ], ], ], ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16Usare Redis
Utilizzare il caching nel controller:
phpnamespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Cache\StorageFactory; class IndexController extends AbstractActionController { public function redisAction() { $cache = StorageFactory::factory([ 'adapter' => [ 'name' => 'redis', 'options' => [ 'server' => [ 'host' => '127.0.0.1', 'port' => 6379, ], ], ], ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->getItem($cacheKey, $success); if (!$success) { $cachedData = 'Hello Redis!'; $cache->setItem($cacheKey, $cachedData); } 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
35Aggiungere il seguente codice nel file
module/Application/view/application/index/redis.phtml
:php<?php echo $this->message; ?>
1Aprire il browser e accedere a
https://servbay-zend-test.local/redis
Esempio di Database Relazionale
Creare la Struttura del Database e i File di Migrazione
Creare i File di Migrazione
Utilizzare lo strumento di Migrations di Laminas per creare i file di migrazione:
bashcomposer require laminas/laminas-db
1Modificare i File di Migrazione
Creare un nuovo file di migrazione nella directory
data/migrations
e modificarlo per definire la struttura del database:phpuse Laminas\Db\Adapter\Adapter; use Laminas\Db\Sql\Sql; class CreateUsersTable { public function up(Adapter $adapter) { $sql = new Sql($adapter); $create = $sql->createTable('users') ->addColumn('id', 'integer', ['auto_increment' => true]) ->addColumn('name', 'varchar', ['length' => 255]) ->addColumn('email', 'varchar', ['length' => 255, 'unique' => true]) ->addPrimaryKey('id'); $adapter->query( $sql->buildSqlString($create), Adapter::QUERY_MODE_EXECUTE ); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20Eseguire la Migrazione
Eseguire manualmente la migrazione per creare la tabella del database:
php$adapter = new Adapter([ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', ]); $migration = new CreateUsersTable(); $migration->up($adapter);
1
2
3
4
5
6
7
8
9
10
Esempio di MySQL
Configurare MySQL
Configurare le informazioni di connessione a MySQL nel file
config/autoload/global.php
:phpreturn [ 'db' => [ 'driver' => 'Pdo_Mysql', 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', ], ];
1
2
3
4
5
6
7
8
9Configurare le Rotte
Aggiungere il seguente codice nel file
module/Application/config/module.config.php
:phpreturn [ 'router' => [ 'routes' => [ 'mysql-add' => [ 'type' => 'Literal', 'options' => [ 'route' => '/mysql-add', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'mysqlAdd', ], ], ], 'mysql' => [ 'type' => 'Literal', 'options' => [ 'route' => '/mysql', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'mysql', ], ], ], ], ], ];
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
26Inserire Dati Utente
Inserire dati utente nel controller:
phpnamespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Db\Adapter\Adapter; use Laminas\Db\Sql\Sql; class IndexController extends AbstractActionController { protected $adapter; public function __construct(Adapter $adapter) { $this->adapter = $adapter; } public function mysqlAddAction() { $sql = new Sql($this->adapter); $insert = $sql->insert('users') ->values([ 'name' => 'ServBay', 'email' => '[email protected]', ]); $this->adapter->query( $sql->buildSqlString($insert), Adapter::QUERY_MODE_EXECUTE ); return new ViewModel([ 'message' => 'User added', ]); } public function mysqlAction() { $sql = new Sql($this->adapter); $select = $sql->select('users'); $result = $this->adapter->query( $sql->buildSqlString($select), Adapter::QUERY_MODE_EXECUTE ); $users = []; foreach ($result as $row) { $users[] = $row; } return new ViewModel([ 'users' => json_encode($users), ]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55Aggiungere il seguente codice nel file
module/Application/view/application/index/mysql-add.phtml
:php<?php echo $this->message; ?>
1Aggiungere il seguente codice nel file
module/Application/view/application/index/mysql.phtml
:php<?php echo $this->users; ?>
1Aprire il browser e accedere a
https://servbay-zend-test.local/mysql-add
ehttps://servbay-zend-test.local/mysql
Esempio di PostgreSQL
Configurare PostgreSQL
Configurare le informazioni di connessione a PostgreSQL nel file
config/autoload/global.php
:phpreturn [ 'db' => [ 'driver' => 'Pdo_Pgsql', 'database' => 'servbay_zend_app', 'username' => 'root', 'password' => 'password', 'hostname' => '127.0.0.1', ], ];
1
2
3
4
5
6
7
8
9Configurare le Rotte
Aggiungere il seguente codice nel file
module/Application/config/module.config.php
:phpreturn [ 'router' => [ 'routes' => [ 'pgsql-add' => [ 'type' => 'Literal', 'options' => [ 'route' => '/pgsql-add', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'pgsqlAdd', ], ], ], 'pgsql' => [ 'type' => 'Literal', 'options' => [ 'route' => '/pgsql', 'defaults' => [ 'controller' => 'Application\Controller\Index', 'action' => 'pgsql', ], ], ], ], ], ];
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
26Inserire Dati Utente
Inserire dati utente nel controller:
phpnamespace Application\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Laminas\Db\Adapter\Adapter; use Laminas\Db\Sql\Sql; class IndexController extends AbstractActionController { protected $adapter; public function __construct(Adapter $adapter) { $this->adapter = $adapter; } public function pgsqlAddAction() { $sql = new Sql($this->adapter); $insert = $sql->insert('users') ->values([ 'name' => 'ServBay', 'email' => '[email protected]', ]); $this->adapter->query( $sql->build
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