Per accedere al database all’interno del nostro container dobbiamo innanzitutto configurare Symfony affinché sia in grado di connettersi correttamente. Se osserviamo la configurazione del nostro docker-compose.yml
noteremo che il container del database è configurato come di seguito:
db:
image: mysql:8.0.18
container_name: kvak_db
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: kvak
MYSQL_USER: kvak
MYSQL_PASSWORD: kvak
Per poter accedere correttamente, quindi, il nostro hostname corrisponde al nome che abbiamo dato al container, ovvero kvak_db
.
Prima di procedere oltre dobbiamo aggiungere una riga di configurazione al file appena visto, per evitare di incappare in problemi di connessione. A partire dalla versione 8 di MySQL, infatti, il plugin di autenticazione di default è auth_socket
e dobbiamo ripristinare questa impostazione su mysql_native_password
. Aggiungiamo, quindi, la seguente riga alla configurazione del database:
command: --default-authentication-plugin=mysql_native_password
e ricreiamo da zero i container con i comandi:
docker-compose down
docker-compose up -d
Accesso al database
Possiamo, ora, configurare Symfony per accedere al database. Apriamo il file app/.env
e modifichiamo la riga relativa al DATABASE_URL
da:
DATABASE_URL=mysql://db_user:db_password@127.0.0.1:3306/db_name?serverVersion=5.7
in:
DATABASE_URL=mysql://kvak:kvak@kvak_db:3306/kvak
Stiamo usando una release di default di MySQL, non è quindi necessario specificare la versione. Per approfondimenti fare riferimento alla guida ufficiale di Doctrine.
In ambiente dev
è sufficiente modificare la riga ma, per sicurezza, svuotiamo anche la cache. Dall’interno del container:
./bin/console cache:clear
A questo punto possiamo verificare che tutto funzioni correttamente. Un test veloce potrebbe essere quello di far girare una query qualsiasi all’interno di un controller. Apriamo il controller della home page app/src/Controller/HomeController.php
ed inseriamo all’inizio della action il seguente codice:
$connection = $this->getDoctrine()->getConnection();
dump($connection->getParams());
dump($connection->fetchColumn("SELECT 'test connessione' AS res"));
Apriamo la nostra home page assicurandoci di essere loggati e, se tutto è configurato correttamente, all’interno della tab dump
della toolbar dovremmo vedere qualcosa simile al risultato descritto in Figura 1.
Troviamo la configurazione sul tag GIT setup-database-connection
.