logo

Extra Block Types (EBT) - Nuova esperienza con Layout Builder❗

Extra Block Types (EBT) - tipi di blocchi stilizzati e personalizzabili: Slideshows, Tabs, Cards, Accordion e molti altri. Impostazioni integrate per sfondo, DOM Box, plugin javascript. Vivi oggi il futuro della costruzione dei layout.

Demo moduli EBT Scarica moduli EBT

❗Extra Paragraph Types (EPT) - Nuova esperienza con Paragraphs

Extra Paragraph Types (EPT) - insieme di moduli basati su paragrafi in modo analogo.

Demo moduli EPT Scarica moduli EPT

Scorri

Creazione di un oggetto di connessione al database

03/10/2025, by Ivan

L’interazione con il database deve avvenire tramite un oggetto di connessione al database. Ci sono diversi scenari che richiedono un po’ di attenzione:

1. Nel codice procedurale, cioè nei file *.module, *.inc o script:
Il modo migliore per creare un’istanza dell’oggetto di connessione al database è tramite il Service Container.

Esempio:

$database = \Drupal::database();
// Oppure
$database = \Drupal::service('database');

Questo restituirà un oggetto di connessione al database configurato per collegarsi al database principale predefinito, come definito nella configurazione del database nel file settings.php.

2. Per ragioni storiche e tecniche, il tipo restituito da \Drupal::database() è \Drupal\Core\Database\Connection, e per questo a volte viene chiamato $connection.
 
3. Nel codice OOP:

  • In alcuni casi l’oggetto di connessione al database può essere già disponibile come membro della classe corrente; ad esempio, molti plugin e servizi hanno $this->database (o $this->connection) – l’oggetto di connessione al database come membro.
  • Se possibile, utilizzare la DI (Dependency Injection) per usare il servizio @database o $container->get('database') per iniettare la connessione al database.
  • Se non è possibile (come in un metodo statico di classe), usare \Drupal::database().
  • Se i servizi non sono ancora disponibili, \Drupal\Core\Database\Database::getConnection() può recuperare una connessione al database.
  • Nei test unitari non abbiamo un core caricato o un container disponibile. I test unitari di solito non devono accedere al database. Un test unitario che richiede il servizio database dovrebbe essere trasformato in un test di tipo kernel.
  • Nelle classi del core e nei test funzionali abbiamo $this->container->get('database'). Alcuni autori di test potrebbero scoprire che il container a cui fa riferimento la classe di test non è sincronizzato con il container corrente durante una richiesta in un test funzionale. In questo caso, l’autore del test può chiamare $this->rebuildContainer() e poi accedere nuovamente a $this->container->get('database').

Uso di un’altra connessione al database

Se il tuo sito utilizza più database, per eseguire una query su un database diverso da quello predefinito utilizza Database::getConnection(). Ad esempio:

$connection = \Drupal\Core\Database\Database::getConnection('default', 'other_database');

Questo garantirà una connessione al database definito in settings.php come:

$databases['other_database']['default']