Symfony mette a disposizione dello sviluppatore una serie di strumenti che permettono di utilizzare e semplificare la gestione di un database. Questi tool, racchiusi all’interno del bundle Doctrine ORM, sono in grado di supportare sia database relazionali come MySQL che database NoSQL come MongoDB.
Prima di procedere con la configurazione di Doctrine ORM, è opportuno spiegare cosa significa ORM.
Cos’è un ORM
META DESCRIPTION: Scopri cos’è un ORM, il suo ruolo nella mappatura object-relational e come facilita la gestione dei dati nelle applicazioni web.
ORM sta per Object-Relational Mapping ed è una tecnica di programmazione che consente di interagire con i database, come ad esempio MySQL o PostgreSQL, utilizzando oggetti. In questo modo, viene ridotta drasticamente la quantità di istruzioni SQL necessarie per eseguire tutte le operazioni sui dati richieste dal progetto. Infatti, l’ORM permette di lavorare con il database utilizzando il paradigma della programmazione orientata agli oggetti.
L’idea di base dietro un ORM è quella di mappare gli oggetti alle tabelle del database e viceversa, come mostrato nello schema seguente.
Questo meccanismo permette agli sviluppatori di concentrarsi sulla logica dell’applicazione piuttosto che sulle specifiche del database.
I principali vantaggi derivanti dall’utilizzo di uno strato ORM sono i seguenti:
- Astrazione del database: non è necessario scrivere codice SQL specifico per un determinato DBMS. L’ORM si occupa di generare istruzioni SQL per il database che si sta utilizzando.
- Sicurezza: L’ORM fornisce protezione integrata contro le vulnerabilità più comuni come SQL injection.
- Manutenibilità: il codice è più pulito, più comprensibile e più facile da manutenere.
- Riusabilità: la separazione tra logica di business e logica di accesso ai dati favorisce il riutilizzo del codice in più componenti.
Ricordiamo che, se dovessi aver necessità di rispolverare i concetti inerenti a database e al linguaggio SQL, potrai consultare,i tra le nostre risorse online, la nostra guida SQL in italiano.
Come installare Doctrine ORM
Procediamo all’installazione di Doctrine tramite il Symfony pack orm:
composer require symfony/orm-pack
Il comando lanciato si è occupato di effettuare l’installazione e la configurazione del bundle Doctrine ORM per Symfony.
Per configurare la connessione al database è necessario accedere al file .env della root del progetto, identificare la variabile DATABASE_URL riferita al proprio DBMS e decommentare. Nel caso di XAMPP, la riga di interesse è la seguente
DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=10.11.2-MariaDB&charset=utf8mb4"
Sostituire app (username), !ChangeMe! (password), 127.0.0.1 (indirizzo), 3306 (porta) e app (nome) e il parametro serverVersion con le impostazioni del proprio server dbms. Per recuperare le informazioni sul server, possiamo avvalerci del supporto di phpmyadmin.
Per prima cosa, accedere al pannello di controllo di XAMPP e avviare il servizio MySql.
Dal pannello di controllo è già visibile l’informazione sulla porta dove è in ascolto il database. Premere su “Admin” (evidenziato in giallo) per accedere a phpmyadmin. Si presenterà la seguente schermata:
Nella parte destra dell’interfaccia web, all’interno della sezione “Server del Database”, sono disponibili le informazioni sul nostro DBMS. La prima riga contiene indirizzo (127.0.0.1) e porta (33306) del database.
Successivamente, è indicata la tipologia (MariaDB) e, più in basso, è possibile reperire la versione del DBMS (10.4.28-MariaDB).
Aggiorniamo, quindi, la variabile DATABASE_URL all’interno del file .env con le informazioni appena recuperate:
DATABASE_URL="mysql://root:test@127.0.0.1:33306/symfonytest?serverVersion=10.4.28-MariaDB&charset=utf8mb4"
A questo punto, occorre solo Inserire le proprie credenziali e scegliere il nome del database per il progetto, in questo caso symfonytest.
Ulteriori configurazioni di Doctrine sono presenti in /config/packages/doctrine.yaml:
Osserviamo il nostro codice. Alla riga 3 notiamo come l’URL per la connessione al database venga recuperato dal file .env appena modificato. Un altro passaggio interessante si trova alla riga 21, dove viene definito il prefisso che identifica il namespace dove devono essere collocate le Entity da mappare. Tutte le altre configurazioni possono essere approfondite sulla documentazione ufficiale.
Come creare un database in Symfony
Completata la configurazione di Doctrine, si può procedere con la creazione del database. Se il database specificato in DATABASE_URL di .env non esiste ancora, è possibile crearlo direttamente da console di Symfony utilizzando il comando:
php bin/console doctrine:database:create
Riceviamo il seguente messaggio in output
Accedendo nuovamente a phpMyAdmin si può notare come, effettivamente, sia stato creato il nuovo database
Il nuovo database risulta senza alcuna tabella definita, vedremo più avanti come creare e mappare nuove tabelle tramite l’utilizzo delle Entity.