Creazione ed Esecuzione di un Progetto Symfony
ServBay è un ambiente di sviluppo web locale progettato specificamente per macOS e Windows. Integra vari runtime come PHP, Node.js, Python, Go, Java, e database come MySQL, PostgreSQL, MongoDB, Redis, oltre a supportare server web Apache e Caddy. In questa guida troverai istruzioni dettagliate su come creare ed eseguire rapidamente un progetto Symfony su macOS e Windows utilizzando ServBay.
Cos’è Symfony?
Symfony è un framework web PHP open-source creato da SensioLabs, progettato per offrire agli sviluppatori un set di strumenti potente, efficiente e flessibile per costruire applicazioni web moderne e API. Seguendo le migliori pratiche del settore, Symfony offre numerosi componenti come routing, template engine (Twig), gestione dei form, autenticazione, dependency injection e molto altro, semplificando notevolmente lo sviluppo delle funzionalità principali.
Principali caratteristiche e vantaggi di Symfony
- Design modulare: Symfony si basa su una libreria di componenti riutilizzabili, che ti consente di scegliere e usare solo quelli necessari, adattandosi sia ad applicazioni leggere che a progetti complessi.
- Prestazioni elevate: L’architettura ottimizzata, il sistema di caching efficace e il supporto alle ultime funzionalità PHP garantiscono prestazioni eccellenti.
- Grande community: Vanta un’ampia comunità di sviluppatori, una vasta gamma di Bundle (plugin di terze parti) e documentazione dettagliata, rendendo facile trovare soluzioni ai problemi.
- Flessibilità: È semplice integrare librerie di terze parti e estensioni; Symfony è adatto a progetti di qualsiasi dimensione e complessità.
- Stabilità e mantenibilità: Seguendo rigorosi standard di codice e design patterns, facilita il testing, la manutenzione e l’espansione delle applicazioni.
Symfony è ideale per sviluppare una vasta gamma di progetti web, da semplici API a sistemi aziendali di grandi dimensioni.
Creazione ed Esecuzione di Progetti Symfony con ServBay
ServBay offre il supporto completo per eseguire progetti Symfony: ambiente PHP adeguato, Composer, server web, database e servizi di caching. Di seguito troverai il percorso guidato per creare e configurare un progetto Symfony utilizzando ServBay.
Prerequisiti
Prima di iniziare, assicurati di avere:
- ServBay installato: ServBay deve essere correttamente installato e avviato su macOS. Se non l’hai ancora fatto, consulta la Guida all’installazione di ServBay.
- ServBay funzionante: I servizi principali di ServBay (come Caddy o Apache e il database scelto) devono essere attivi.
- Conoscenza di base: Devi avere almeno una comprensione elementare di PHP, Composer e Symfony.
Creazione di un Progetto Symfony
ServBay consiglia di organizzare tutti i tuoi progetti nella cartella /Applications/ServBay/www
, facilitando la loro gestione.
Verifica la disponibilità di Composer
Composer è già integrato e configurato in ServBay, non occorre installarlo separatamente. Puoi verificarne la disponibilità con il comando
composer --version
nel terminale.Crea la cartella del progetto
All’interno della directory consigliata, crea una cartella per il tuo nuovo progetto Symfony:
bashcd /Applications/ServBay/www mkdir servbay-symfony-app
1
2Crea il progetto Symfony utilizzando Composer
Entra nella cartella appena creata e utilizza Composer per generare il progetto Symfony partendo dal modello
website-skeleton
(uno scheletro di base con le dipendenze comuni per le applicazioni web tradizionali).bashcd /Applications/ServBay/www/servbay-symfony-app composer create-project symfony/website-skeleton .
1
2Questo comando scaricherà i file core di Symfony e le sue dipendenze nella cartella corrente.
Configurazione Iniziale
La configurazione principale di Symfony avviene tramite variabili d’ambiente, solitamente nel file .env
nella directory principale del progetto.
Configura le variabili d’ambiente (
.env
)Apri il file
.env
nel root del tuo progetto. Qui puoi impostare configurazioni come la connessione al database, la chiave di sicurezza, ecc. Modifica o aggiungi le opzioni secondo le tue necessità.Verifica che queste configurazioni siano corrette e adatte al tuo ambiente ServBay:
dotenv# Esempio di file .env APP_ENV=dev # ambiente di sviluppo APP_SECRET=your_secret_key # sostituisci con una chiave casuale e unica per la sicurezza # Connessione al database (esempio con MySQL, vedi sotto per altri dettagli) # DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name?serverVersion=8.0&charset=utf8mb4" # DATABASE_URL="postgresql://db_user:db_password@127.0.0.1:5432/db_name?serverVersion=13&charset=utf8" # DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
1
2
3
4
5
6
7
8Sostituisci
your_secret_key
con una stringa casuale e sicura. Per la connessione al database, ServBay usa di default l’utenteroot
e la passwordpassword
(ricorda di modificarli per la produzione!). Usiamoservbay_symfony_app
come nome di database di esempio.
Configurazione del Web Server (Website in ServBay)
Per accedere al tuo progetto Symfony da browser, usa la funzione “Sito” di ServBay per configurare un host virtuale locale. La root web di Symfony è la cartella public/
nel progetto.
Apri il pannello di controllo di ServBay, vai su “Siti” (o “Host” nelle versioni precedenti) e aggiungi un nuovo sito:
- Nome: Scegli un nome descrittivo, ad esempio
My Symfony Dev Site
. - Dominio: Imposta un dominio locale, ad esempio
servbay-symfony-test.local
. ServBay lo risolverà in automatico sul tuo dispositivo. - Tipo di sito: Seleziona
PHP
. - Versione PHP: Scegli la versione PHP più aggiornata compatibile con il tuo progetto Symfony, ad esempio
8.3
. - Root sito: Fondamentale: la root del sito deve puntare alla cartella
public/
del progetto, ossia/Applications/ServBay/www/servbay-symfony-app/public
.
Salva e applica le modifiche. ServBay aggiornerà automaticamente la configurazione del server web. Utilizza Caddy o Apache e genera/accetta automaticamente il certificato SSL per il dominio locale, così puoi accedere direttamente via HTTPS.
Per istruzioni dettagliate consulta Aggiunta del primo sito in ServBay.
Aggiunta di Codice di Esempio di Base
Per verificare che la configurazione funzioni, aggiungi una semplice route e controller che visualizzi un messaggio alla visita del percorso root.
Configura la Route (
config/routes.yaml
)Apri il file
config/routes.yaml
e aggiungi la seguente definizione per il percorso/
associato al controllerindex
:yaml# config/routes.yaml index: path: / controller: App\Controller\DefaultController::index
1
2
3
4Crea il Controller (
src/Controller/DefaultController.php
)Nella cartella
src/Controller/
crea il file PHPDefaultController.php
con questo codice:php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class DefaultController { /** * @Route("/", name="index") */ public function index(): Response { // Restituisce una semplice risposta HTTP return new Response('Hello ServBay and Symfony!'); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Questo crea il controller
DefaultController
con il metodoindex
, associato via annotazione a/
. Visitando la root riceverai il testo "Hello ServBay and Symfony!".
Accesso al Sito
Apri il browser e visita il dominio che hai configurato in ServBay: https://servbay-symfony-test.local
. Se tutto è corretto, dovresti vedere:
Hello ServBay and Symfony!
1
Segno che il tuo progetto Symfony gira correttamente tramite ServBay. ServBay configura automaticamente HTTPS, quindi è consigliato usare https://
.
Esempi di Database e Caching
Symfony utilizza di norma Doctrine ORM per gestire database relazionali, e Symfony Cache per caching e database NoSQL. ServBay fornisce vari servizi database e le relative estensioni PHP, permettendoti di usarli facilmente nei tuoi progetti Symfony.
Esempio di Database Relazionale (Doctrine ORM)
ServBay supporta MySQL e PostgreSQL. Ecco come configurarli in Symfony.
Configura la Connessione Database
Nel file
.env
nel root del progetto, modifica e attiva la configurazioneDATABASE_URL
secondo il database scelto.- MySQL: Utente di default:
root
, password:password
, porta:3306
.dotenv# .env DATABASE_URL="mysql://root:password@127.0.0.1:3306/servbay_symfony_app?serverVersion=8.0&charset=utf8mb4"
1
2 - PostgreSQL: Utente di default:
root
, password:password
, porta:5432
.dotenv# .env DATABASE_URL="postgresql://root:password@127.0.0.1:5432/servbay_symfony_app?serverVersion=13&charset=utf8"
1
2
Assicurati che il servizio database interessato (MySQL o PostgreSQL) sia attivo nel pannello ServBay.
- MySQL: Utente di default:
Crea il Database
Se il database
servbay_symfony_app
non esiste, puoi crearlo via strumenti ServBay (phpMyAdmin, pgAdmin) o via Symfony CLI:bashphp bin/console doctrine:database:create
1Crea Entity e Migrazioni
Usa Maker Bundle per generare Entity Doctrine e file di migrazione.
- Crea una Entity (es.
User
):bashAggiungi i campi comephp bin/console make:entity User
1name
(string) edemail
(string, unique=yes) seguendo le istruzioni. - Crea una migrazione:bashQuesto genera un file SQL in
php bin/console make:migration
1src/Migrations
che crea la tabellausers
.
- Crea una Entity (es.
Esegui la Migrazione
Applica la struttura del database:
bashphp bin/console doctrine:migrations:migrate
1Aggiungi Esempi di Operazioni sul Database
Modifica
src/Controller/DefaultController.php
per aggiungere esempi di scrittura/lettura dati, iniettandoEntityManagerInterface
.Prima, assicurati che il costruttore di
DefaultController
ricevaEntityManagerInterface
:php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Doctrine\ORM\EntityManagerInterface; // Importa EntityManagerInterface use App\Entity\User; // Importa la classe User Entity use Symfony\Component\HttpFoundation\JsonResponse; // Per risposta JSON class DefaultController { private $entityManager; // Iniezione EntityManagerInterface public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/", name="app_index") */ public function index(): Response { return new Response('Hello ServBay and Symfony!'); } // ... altri metodi ... }
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
30Poi, aggiungi nuove route in
config/routes.yaml
:yaml# config/routes.yaml # ... altre route ... mysql_add_user: path: /mysql-add-user # oppure /pgsql-add-user secondo il database scelto controller: App\Controller\DefaultController::addUser mysql_get_users: path: /mysql-users # oppure /pgsql-users controller: App\Controller\DefaultController::getUsers
1
2
3
4
5
6
7
8E aggiungi i metodi corrispondenti in
src/Controller/DefaultController.php
:php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\HttpFoundation\JsonResponse; // Importa JsonResponse class DefaultController { private $entityManager; public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } /** * @Route("/", name="app_index") */ public function index(): Response { return new Response('Hello ServBay and Symfony!'); } /** * @Route("/add-user", name="app_add_user") */ public function addUser(): Response { $user = new User(); // Usa dati di esempio collegati al brand ServBay $user->setName('ServBay Demo User'); $user->setEmail('demo-user@servbay.test'); // Persistenza dei dati (preparazione per scrittura) $this->entityManager->persist($user); // Esecuzione del salvataggio nel database $this->entityManager->flush(); return new Response('User aggiunto con successo!'); } /** * @Route("/get-users", name="app_get_users") */ public function getUsers(): JsonResponse { // Recupera tutte le entità User dal database $users = $this->entityManager->getRepository(User::class)->findAll(); // Conversione in array per la risposta JSON $usersArray = []; foreach ($users as $user) { $usersArray[] = [ 'id' => $user->getId(), 'name' => $user->getName(), 'email' => $user->getEmail(), ]; } // Restituzione della risposta in formato JSON return new JsonResponse($usersArray); } }
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
67Test degli Esempi
- Vai su
https://servbay-symfony-test.local/add-user
per aggiungere un utente. - Vai su
https://servbay-symfony-test.local/get-users
per vedere la lista degli utenti (in formato JSON).
- Vai su
Esempio di Caching e Database NoSQL (Symfony Cache)
ServBay offre servizi Redis e Memcached, e le estensioni PHP necessarie, quindi puoi utilizzare direttamente Symfony Cache per sfruttarli.
Configura la Connessione Cache
Nel file
.env
, configura il servizio cache scelto.- Memcached: Porta di default
11211
.dotenvAssicurati che Memcached sia attivo in ServBay.# .env # ... altre config ... CACHE_DSN=memcached://127.0.0.1:11211
1
2
3 - Redis: Porta di default
6379
.dotenvAssicurati che Redis sia attivo nel pannello ServBay.# .env # ... altre config ... CACHE_DSN=redis://127.0.0.1:6379 # Se Redis necessita password (di default su ServBay non serve): # CACHE_DSN=redis://:your_password@127.0.0.1:6379
1
2
3
4
5
- Memcached: Porta di default
Aggiungi Esempio di Utilizzo Cache
Modifica
src/Controller/DefaultController.php
per aggiungere una route di esempio che interagisca con la cache. IniettaCacheInterface
nel controller.Aggiorna il costruttore:
php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Contracts\Cache\CacheInterface; // Importa CacheInterface class DefaultController { private $entityManager; private $cache; // Aggiungi la proprietà cache // Iniezione CacheInterface public function __construct(EntityManagerInterface $entityManager, CacheInterface $cache) { $this->entityManager = $entityManager; $this->cache = $cache; // Assegna } // ... altri metodi ... }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25Aggiorna le route in
config/routes.yaml
:yaml# config/routes.yaml # ... altre route ... cache_example: path: /cache-example controller: App\Controller\DefaultController::cacheExample
1
2
3
4
5E aggiungi il metodo di esempio nel controller:
php<?php // src/Controller/DefaultController.php namespace App\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; use Doctrine\ORM\EntityManagerInterface; use App\Entity\User; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Contracts\Cache\CacheInterface; use Symfony\Component\Cache\Item\ItemInterface; // Importa ItemInterface class DefaultController { private $entityManager; private $cache; public function __construct(EntityManagerInterface $entityManager, CacheInterface $cache) { $this->entityManager = $entityManager; $this->cache = $cache; } // ... altri metodi ... /** * @Route("/cache-example", name="app_cache_example") */ public function cacheExample(): Response { // Prova a recuperare il dato dalla cache $cacheItem = $this->cache->get('my_symfony_cache_key', function (ItemInterface $item) { // Se la cache non è disponibile/valida, esegue questa funzione $item->expiresAfter(3600); // scadenza cache a 1 ora // Simula un’operazione costosa (es. query complessa) $data = "Dato generato in " . date('Y-m-d H:i:s'); // Restituisce il dato da cache return $data; }); // $cacheItem è il dato dalla cache (se presente) o appena generato $output = "Da Cache: " . $cacheItem; return new Response($output); } }
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
48Test dell’Esempio
- Vai su
https://servbay-symfony-test.local/cache-example
. La prima volta il dato viene generato e salvato in cache, le visite successive (entro 1 ora) lo leggono direttamente da Memcached o Redis.
- Vai su
FAQ (Domande Frequenti)
D: Visitando https://servbay-symfony-test.local
ricevo errore “Pagina non trovata” o 500?
R: Controlla questi punti:
- Verifica che ServBay sia avviato e il servizio web (Caddy/Apache) sia attivo.
- Controlla che la configurazione del sito, il dominio
servbay-symfony-test.local
e la root punta esattamente a/Applications/ServBay/www/servbay-symfony-app/public
. - Leggi il file log di Symfony (
var/log/dev.log
) per dettagli sull’errore. - In esegui
composer install
nella root del progetto per assicurarti che tutte le dipendenze siano presenti. - Verifica che la versione di PHP sia compatibile con Symfony.
D: Errore di connessione al database?
R: Verifica:
- Che il servizio database (MySQL o PostgreSQL) sia attivo nel pannello ServBay.
- La stringa
DATABASE_URL
nel.env
(user, password, host127.0.0.1
, porta (MySQL 3306, PostgreSQL 5432), nome del database). - Che le credenziali usate corrispondano a quelle impostate su ServBay.
- Che il database
servbay_symfony_app
esista e sia accessibile.
D: Il comando php bin/console
non funziona?
R: Assicurati di essere nella cartella /Applications/ServBay/www/servbay-symfony-app
e che il PHP configurato da ServBay sia nel PATH del sistema (ServBay lo fa di default). Puoi verificarlo con which php
dal terminale.
Conclusione
Seguendo questa guida hai creato, configurato e avviato con successo un progetto Symfony base su macOS utilizzando ServBay. ServBay offre tutti i componenti essenziali per lo sviluppo Symfony (PHP, Composer, server web, database, caching) e semplifica notevolmente la configurazione dell’ambiente, permettendoti di dedicarti subito alla scrittura del tuo codice. Puoi continuare a espandere il progetto esplorando le funzionalità avanzate di Symfony e sfruttando tutte le risorse e servizi aggiuntivi offerti da ServBay.