Creare ed Eseguire un Progetto Yii 2 con ServBay
Panoramica: Cos'è Yii 2?
Yii 2 è un framework PHP ad alte prestazioni, basato su componenti, pensato per lo sviluppo rapido di applicazioni web moderne. Segue il modello architetturale MVC (Model-View-Controller) e offre una gamma di funzionalità e strumenti che aiutano gli sviluppatori a costruire applicazioni web scalabili e di alta qualità in modo efficiente. Yii 2 è popolare per la sua velocità, architettura flessibile e robusti strumenti integrati quali caching, sicurezza, supporto allo sviluppo di API RESTful e molto altro.
Caratteristiche principali e vantaggi di Yii 2
- Prestazioni elevate: Yii 2 è ottimizzato per gestire richieste ad alta concorrenza, ideale per applicazioni dove le prestazioni sono critiche.
- Modularità: Il framework è altamente modulare, facilitando la gestione del codice e il riutilizzo dei componenti.
- Sicurezza: Dispone di funzioni di sicurezza integrate, come la validazione dell'input, il filtraggio dell'output, la protezione contro CSRF/XSS e un framework per l'autenticazione e l'autorizzazione.
- Facilità d'uso: Offre un'API intuitiva e una documentazione dettagliata, riducendo la curva di apprendimento e permettendo ai developer di essere subito operativi.
- Community attiva: Vanta una community ampia e un ecosistema ricco di estensioni di terze parti, rendendo semplice ottenere supporto e risorse.
- Strumenti integrati: Include tool da linea di comando per migrazioni di database, generazione di codice e altre attività, aumentando la produttività.
Yii 2 è la scelta ideale per sviluppare progetti web aziendali, API RESTful, portali e numerosi altri tipi di applicazioni.
Utilizzo di ServBay per eseguire progetti Yii 2
ServBay è una piattaforma di sviluppo web locale progettata per macOS e Windows, che integra PHP, diversi sistemi di database (MySQL, PostgreSQL, MongoDB, Redis), web server (Caddy, Nginx) e altri strumenti (Composer, Node.js, Python, Go, Java, ecc.), offrendo agli sviluppatori un ambiente pronto all'uso, versatile e potente.
Questa guida ti mostrerà come creare ed eseguire un'applicazione Yii 2 utilizzando l'ambiente PHP, Composer e i servizi database di ServBay. Useremo la funzione "Siti Web" di ServBay per configurare il server locale e ti guideremo passo-passo nella configurazione e nell'accesso al progetto.
Prerequisiti
Assicurati di avere:
- ServBay installato e funzionante su macOS o Windows.
- Una versione adeguata di PHP abilitata in ServBay (es. PHP 8.3 o superiore).
- I servizi database (MySQL o PostgreSQL) e cache (Memcached e Redis) attivi in ServBay.
Puoi verificare e gestire questi pacchetti direttamente dall'interfaccia principale di ServBay.
Creazione di un progetto Yii 2
TIP
ServBay consiglia di archiviare i file dei tuoi progetti nelle seguenti directory, per mantenere ordine e facilitare la gestione tramite la funzione "Siti Web":
- macOS:
/Applications/ServBay/www
- Windows:
C:\ServBay\www
Composer: ServBay integra già Composer, non è necessaria un'installazione a parte. Puoi usare direttamente il comando
composer
dal terminale.Creazione della cartella del progetto: Apri il terminale, vai nella cartella root di ServBay e crea una nuova directory per il progetto.
macOS:
bashcd /Applications/ServBay/www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Windows:
cmdcd C:\ServBay\www mkdir servbay-yii2-app cd servbay-yii2-app
1
2
3Crea progetto Yii 2 con Composer: Nella cartella
servbay-yii2-app
, esegui il comando Composer per creare un nuovo progetto Yii 2 di base.bashcomposer create-project --prefer-dist yiisoft/yii2-app-basic .
1Questo comando scarica la template di Yii 2 e tutte le dipendenze nella cartella corrente (
.
). Attendi che Composer termini il download e l'installazione.Entra nella directory del progetto: Assicurati di essere nella root del progetto, dove verranno eseguiti tutti i comandi successivi.
macOS:
bashcd /Applications/ServBay/www/servbay-yii2-app
1Windows:
cmdcd C:\ServBay\www\servbay-yii2-app
1
Configurazione iniziale
Dopo la creazione del progetto, dovrai eseguire alcune configurazioni di base, in particolare per la connessione al database e i componenti.
Configurazione del database: Modifica il file
config/db.php
nella root del progetto. Imposta le informazioni di connessione in base al database scelto (MySQL o PostgreSQL) e ai parametri di ServBay (l'utente predefinito è di solitoroot
, la passwordpassword
, salvo modifiche manuali).Prima di tutto, dagli strumenti di ServBay crea un nuovo database dedicato, ad esempio
servbay_yii2_app
. Puoi usare Adminer integrato in ServBay o tool preferiti come Sequel Ace, TablePlus, ecc. Adminer è accessibile direttamente dalla sezione database dell'applicazione ServBay.Per MySQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;dbname=servbay_yii2_app', // dbname deve corrispondere al nome del database che hai creato 'username' => 'root', // nome utente del database 'password' => 'password', // password del database 'charset' => 'utf8mb4', // raccomandato per il supporto ai caratteri internazionali ];
1
2
3
4
5
6
7
8
9Per PostgreSQL:
php<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'pgsql:host=127.0.0.1;port=5432;dbname=servbay_yii2_app', // dbname come sopra, porta di default 5432 'username' => 'root', // nome utente del database 'password' => 'password', // password del database 'charset' => 'utf8', 'schemaMap' => [ 'pgsql' => [ 'class' => 'yii\pgsql\Schema', 'defaultSchema' => 'public', // schema di default in PostgreSQL ], ], ];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Scegli e modifica
config/db.php
in base alle tue necessità.Configurazione cache e componenti Redis: Modifica il file
config/web.php
nella root del progetto. Aggiungi o aggiorna la sezionecomponents
per configurare Memcached e Redis. La porta predefinita di Memcached su ServBay è11211
, quella di Redis6379
.php<?php // ... altre impostazioni 'components' => [ // ... altri componenti esistenti (request, cache, user, errorHandler, log, urlManager) 'cache' => [ 'class' => 'yii\caching\MemCache', 'servers' => [ [ 'host' => '127.0.0.1', 'port' => 11211, // porta Memcached di default 'weight' => 100, ], ], ], 'redis' => [ 'class' => 'yii\redis\Connection', 'hostname' => '127.0.0.1', 'port' => 6379, // porta Redis di default 'database' => 0, // indice del database Redis ], // ... altri componenti ], // ... altre impostazioni
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
28Verifica di aver avviato i servizi Memcached e Redis su ServBay. Nota che l'utilizzo di Redis come cache richiede il pacchetto
yiisoft/yii2-redis
(Composer installerà le dipendenze base durante ilcreate-project
, per altri pacchetti usacomposer require yiisoft/yii2-redis
). Memcached di solito usayiisoft/yii2-memcached
. La template potrebbe già includerli.
Configurazione del web server (Siti Web di ServBay)
Utilizza la funzione "Siti Web" di ServBay per configurare il server web locale (Caddy o Nginx) affinché punti al tuo progetto Yii 2.
- Avvia ServBay: Apri ServBay.
- Vai alle impostazioni dei siti: Cerca la sezione "Siti Web" nella barra di navigazione.
- Aggiungi un nuovo sito: Clicca sul bottone per l'aggiunta (
+
oAggiungi
). - Compila le informazioni:
- Nome: Scegli un nome riconoscibile, ad esempio
My First Yii 2 Dev Site
. - Dominio: Inserisci il dominio locale da usare, tipo
servbay-yii2-test.local
. ServBay lo collegherà automaticamente a127.0.0.1
. - Tipo di sito: Seleziona
PHP
. - Versione PHP: Indica quella desiderata (es.
8.3
). Deve essere installata e attiva su ServBay. - Directory root del sito: Fondamentale! Per la template base di Yii 2, il punto di ingresso pubblico è la cartella
web
dentro la root del progetto:- macOS:
/Applications/ServBay/www/servbay-yii2-app/web
- Windows:
C:\ServBay\www\servbay-yii2-app\web
- macOS:
- Nome: Scegli un nome riconoscibile, ad esempio
- Salva e applica: Salva la configurazione e ServBay aggiornerà automaticamente il web server.
Trovi una guida dettagliata nella documentazione ufficiale di ServBay: Aggiungi il tuo primo sito web.
ServBay emetterà e farà riconoscere automaticamente il certificato SSL per il dominio locale (tramite ServBay User CA o ServBay Public CA), perciò potrai accedere in sicurezza tramite HTTPS.
Aggiunta di codice di esempio per dimostrare le funzionalità
Per mostrare l'uso di database e cache, puoi aggiungere alcune azioni di esempio al controller predefinito di Yii 2.
Modifica il file controllers/SiteController.php
e aggiungi i seguenti metodi alla classe SiteController
:
php
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\web\Response;
use yii\db\Exception as DbException; // Importa la classe eccezione per DB
class SiteController extends Controller
{
/**
* Mostra la homepage.
*
* @return string
*/
public function actionIndex()
{
return $this->render('index');
}
/**
* Dimostrazione di utilizzo di Memcached.
*
* @return Response
*/
public function actionMemcached()
{
$cache = Yii::$app->cache;
$key = 'my_memcached_test_key';
$data = 'Hello Memcached from ServBay!';
$duration = 60; // Cache per 60 secondi
if ($cache->set($key, $data, $duration)) {
$value = $cache->get($key);
return $this->asText("Memcached impostato con successo. Valore recuperato: " . $value);
} else {
return $this->asText("Impossibile impostare i dati in Memcached. Verifica che il servizio e la configurazione siano corretti.");
}
}
/**
* Dimostrazione di utilizzo di Redis.
*
* @return Response
*/
public function actionRedis()
{
$redis = Yii::$app->redis;
$key = 'my_redis_test_key';
$data = 'Hello Redis from ServBay!';
try {
if ($redis->set($key, $data)) {
$value = $redis->get($key);
return $this->asText("Redis impostato con successo. Valore recuperato: " . $value);
} else {
return $this->asText("Impossibile impostare i dati in Redis. Verifica che il servizio e la configurazione siano corretti.");
}
} catch (\yii\base\Exception $e) {
return $this->asText("Errore Redis: " . $e->getMessage() . ". Verifica che il servizio e la configurazione siano corretti.");
}
}
/**
* Dimostrazione di aggiunta di un utente al database.
* Presuppone che la tabella 'users' esista.
*
* @return Response
*/
public function actionMysqlAdd() // Valido anche per PostgreSQL con la configurazione corretta
{
try {
$count = Yii::$app->db->createCommand()->insert('users', [
'name' => 'ServBay Demo User', // Nome demo brandizzato
'email' => 'demo-user@servbay.test', // Email demo brandizzata
])->execute();
return $this->asText("Utente aggiunto con successo. Righe modificate: " . $count);
} catch (DbException $e) {
return $this->asText("Impossibile aggiungere utente al database. Errore: " . $e->getMessage() . ". Verifica che il database, la configurazione e la tabella 'users' siano corretti.");
}
}
/**
* Dimostrazione di recupero utenti dal database.
* Presuppone che la tabella 'users' esista.
*
* @return Response
*/
public function actionMysql() // Valido anche per PostgreSQL con la configurazione corretta
{
try {
$users = Yii::$app->db->createCommand('SELECT id, name, email FROM users')->queryAll();
// Output formattato per evitare confusione o mostrare dati sensibili inadvertitamente
$output = "Utenti recuperati:\n";
foreach ($users as $user) {
$output .= "- ID: {$user['id']}, Nome: {$user['name']}, Email: {$user['email']}\n";
}
return $this->asText($output);
} catch (DbException $e) {
return $this->asText("Impossibile recuperare utenti dal database. Errore: " . $e->getMessage() . ". Verifica che il database, la configurazione e la tabella 'users' siano corretti.");
}
}
// Se usi PostgreSQL puoi aggiungere azioni dedicate, ma solitamente si usa lo stesso componente db
// public function actionPgsqlAdd() { ... }
// public function actionPgsql() { ... }
/**
* Formatta l'output come testo semplice.
* @param string $text
* @return Response
*/
protected function asText($text)
{
Yii::$app->response->format = Response::FORMAT_RAW;
Yii::$app->response->getHeaders()->add('Content-Type', 'text/plain');
return $text;
}
/**
* Formatta l'output come JSON.
* @param mixed $data
* @return Response
*/
protected function asJson($data)
{
Yii::$app->response->format = Response::FORMAT_JSON;
return $data;
}
}
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
Notare che in actionMysqlAdd
e actionMysql
ho aggiunto la gestione degli errori e modificato l'output per rendere più chiaro il risultato, oltre a uniformare nome utente ed email per il brand ServBay.
Modifica il file views/site/index.php
, il corrispondente per la vista actionIndex
. Puoi personalizzare o lasciare il contenuto di default. Esempio:
php
<?php
/* @var $this yii\web\View */
/* @var $name string */
/* @var $message string */
/* @var $exception Exception */
use yii\helpers\Html;
$this->title = 'La mia applicazione Yii2 su ServBay'; // Aggiorna il titolo
?>
<div class="site-index">
<div class="jumbotron">
<h1>Congratulazioni!</h1>
<p class="lead">Hai creato con successo la tua applicazione Yii2 e la hai configurata con ServBay!</p>
<p><a class="btn btn-lg btn-success" href="https://www.yiiframework.com">Inizia a usare Yii</a></p>
</div>
<div class="body-content">
<h2>Dimostrazioni</h2>
<ul>
<li><a href="<?= Html::toRoute('site/memcached') ?>">Test Memcached</a></li>
<li><a href="<?= Html::toRoute('site/redis') ?>">Test Redis</a></li>
<li><a href="<?= Html::toRoute('site/mysql-add') ?>">Aggiungi un utente al DB</a> (Richiede la tabella 'users')</li>
<li><a href="<?= Html::toRoute('site/mysql') ?>">Recupera utenti dal DB</a> (Richiede la tabella 'users')</li>
</ul>
<p>Assicurati che i servizi Memcached, Redis e il database scelto (MySQL/PostgreSQL) siano attivi su ServBay e correttamente configurati nei file `config/web.php` e `config/db.php`.</p>
<p>Per gli esempi di database, crea prima la tabella 'users' tramite le migrazioni di Yii (vedi sotto).</p>
</div>
</div>
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
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
Ho aggiunto i link alle nuove azioni per facilitare i test.
Database relazionale: creazione della struttura tramite migrazione
Per usare le azioni di esempio (actionMysqlAdd
, actionMysql
), devi creare manualmente la tabella users
nel database. Yii consiglia di gestire le modifiche allo schema mediante le migrazioni.
Crea una migrazione tramite il tool Gii: Da terminale, nella root del progetto, esegui il comando per creare il file di migrazione.
Percorso root:
- macOS:
/Applications/ServBay/www/servbay-yii2-app
- Windows:
C:\ServBay\www\servbay-yii2-app
bashphp yii migrate/create create_users_table
1Segui le istruzioni e conferma con
yes
quando richiesto. Verrà creato un file PHP nella cartellamigrations
con un nome simile amYYYYMMDD_HHMMSS_create_users_table.php
.- macOS:
Modifica il file di migrazione: Apri il file generato e definisci la struttura della tabella
users
nel metodoup()
.php<?php use yii\db\Migration; /** * Gestisce la creazione della tabella `{{%users}}`. */ class mXXXXXXXXXXXXXX_create_users_table extends Migration // XXXXXXXXXXXXXX è il timestamp { /** * {@inheritdoc} */ public function up() { $this->createTable('{{%users}}', [ // Usa {{%users}} se ci sono prefissi configurati 'id' => $this->primaryKey(), 'name' => $this->string()->notNull(), 'email' => $this->string()->notNull()->unique(), 'created_at' => $this->timestamp()->defaultExpression('CURRENT_TIMESTAMP'), 'updated_at' => $this->timestamp()->defaultExpression('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'), ]); // Facoltativo: creë un indice per migliorare le query $this->createIndex( 'idx-users-email', '{{%users}}', 'email', true // true significa indice unico ); } /** * {@inheritdoc} */ public function down() { // Rimuove l'indice $this->dropIndex( 'idx-users-email', '{{%users}}' ); // Elimina la tabella $this->dropTable('{{%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
46Sostituisci
mXXXXXXXXXXXXXX_create_users_table
con il nome effettivo del file.Esegui la migrazione: Da terminale, nella root del progetto, esegui la migrazione per creare la tabella nel database come definito.
bashphp yii migrate
1Conferma con
yes
quando richiesto.
Accesso al sito e test delle funzionalità
Ora puoi aprire il browser e visitare il dominio configurato in ServBay, ad esempio https://servbay-yii2-test.local
.
- Vai su
https://servbay-yii2-test.local
: dovrebbe comparire la homepage della template di Yii 2, con i link per le dimostrazioni. - Clicca "Test Memcached" o vai su
https://servbay-yii2-test.local/index.php?r=site/memcached
: se Memcached è attivo e correttamente configurato, vedrai "Memcached impostato con successo...". - Clicca "Test Redis" o vai su
https://servbay-yii2-test.local/index.php?r=site/redis
: se Redis funziona, vedrai un messaggio analogo. - Clicca "Aggiungi un utente al DB" o su
https://servbay-yii2-test.local/index.php?r=site/mysql-add
: se database e tabella sono corretti, vedrai conferma dell'inserimento utente. - Clicca "Recupera utenti dal DB" o su
https://servbay-yii2-test.local/index.php?r=site/mysql
: viene mostrata la lista degli utenti dalla tabella.
Se il test non va a buon fine, assicurati che tutti i servizi (PHP, web server, database, Memcached, Redis) siano attivi in ServBay e che i file di configurazione di Yii 2 (config/db.php
, config/web.php
) e la tabella siano impostati correttamente.
FAQ – Domande Frequenti
- Perché ricevo "Impossibile accedere al sito" o errori del certificato? Verifica di aver aggiunto il dominio nelle impostazioni "Siti Web" e che ServBay sia in esecuzione. ServBay configura automaticamente DNS e certificato SSL. Per correggere gli errori del certificato, assicurati di aver aggiunto la CA di ServBay tra quelle affidabili. Consulta la documentazione specifica di ServBay.
- Il comando Composer non funziona? Assicurati che il pacchetto Composer sia abilitato dall'app ServBay e che tu stia usando il terminale di macOS. ServBay aggiunge Composer al tuo PATH automaticamente.
- Connessione al database fallita? Verifica che il servizio database (MySQL/PostgreSQL) sia attivo su ServBay. Controlla nel
config/db.php
chedsn
,username
epassword
siano corretti e che il databaseservbay_yii2_app
esista. Utilizza Adminer integrato per verificare il collegamento e la presenza del database. - Memcached/Redis non si connettono? Assicurati che i servizi corrispondenti siano attivi su ServBay e che la configurazione di
host
eport
inconfig/web.php
sia corretta (tipicamente127.0.0.1
e la porta predefinita). - Migrazione del database (
php yii migrate
) fallisce? Verifica checonfig/db.php
sia configurato e che il servizio database sia attivo e il database creato. Il comando deve poter accedere al database. - Perché
actionMysqlAdd
/actionMysql
segnala che la tabella non esiste? Devi prima eseguire la migrazione tramitephp yii migrate
per creare la tabellausers
. - Come visualizzo il log degli errori PHP? ServBay gestisce i log di PHP e dei web server in modo centralizzato. Puoi consultarli dalla sezione "Log" dell'applicazione ServBay, utile per la diagnostica.
Conclusione
Con ServBay puoi creare in modo semplice e veloce ambienti di sviluppo locale completi per Yii 2 su macOS e Windows. Composer preinstallato, gestione delle versioni PHP, database e cache integrati e il sistema di configurazione dei siti semplificano drasticamente il setup e lo sviluppo di progetti Yii 2. Seguendo questa guida, inizierai subito il tuo percorso di sviluppo con Yii 2 e potrai sfruttare tutti gli strumenti ServBay per lavorare in modo più produttivo.
Buon lavoro e buon divertimento con lo sviluppo!