logo

Extra Block Types (EBT) - Nieuwe Layout Builder ervaring❗

Extra Block Types (EBT) - gestileerde, aanpasbare bloktypes: Slideshows, Tabs, Cards, Accordions en vele andere. Ingebouwde instellingen voor achtergrond, DOM Box, javascript-plugins. Ervaar vandaag al de toekomst van layout building.

Demo EBT-modules Download EBT-modules

❗Extra Paragraph Types (EPT) - Nieuwe Paragraphs ervaring

Extra Paragraph Types (EPT) - analoge op paragrafen gebaseerde set modules.

Demo EPT-modules Download EPT-modules

Scroll
03/10/2025, by Ivan

Het primaire middel om een databaseverbinding te definiëren is de array $databases in settings.php. Zoals de naam al aangeeft, maakt $databases het mogelijk om meerdere databaseverbindingen te definiëren. Het ondersteunt ook het definiëren van meerdere targets. Een databaseverbinding wordt niet geopend (er wordt geen connectie-object aangemaakt) totdat het eerste stuk code probeert een query uit te voeren op die database.

Connectiesleutel

$databases['default'] // De databaseverbinding.

De connectiesleutel is een unieke identifier voor een bepaalde databaseverbinding. De sleutel moet uniek zijn voor de site, en er moet altijd een default verbinding bestaan die de primaire Drupal-database vormt. Op de meeste sites is dit de enige gedefinieerde verbinding.

Target

$databases['default']['default'] // Het databasetarget.

Een connectiesleutel moet één of meerdere targets hebben. Een target is een database die kan worden gebruikt als die beschikbaar is. Het target "default" moet altijd worden gedefinieerd voor elke connectiesleutel. Als een opgevraagd target niet gedefinieerd is, valt het systeem automatisch terug op "default".

Het belangrijkste gebruik van targets is voor primary/replica setups. Het "default"-target is de primaire SQL-server. Vervolgens kan men één of meerdere "replica"-targets definiëren (let op dat in sommige situaties "replica" de enige toegestane alternatieve target is, bijvoorbeeld in statische queries). Queries die gemarkeerd zijn om een replica-server te gebruiken indien beschikbaar, zullen proberen het target "replica" te gebruiken. Als dat beschikbaar is, wordt die connectie geopend (indien nog niet actief), en draait de query op de replica-server. Zo niet, dan wordt de query uitgevoerd op de primaire server. Dit biedt een transparante fallback, zodat de code voordeel kan halen uit een replica als die beschikbaar is, maar toch blijft werken zonder wijzigingen als dat niet zo is.

Syntaxis van $databases

De array $databases is een geneste array van minimaal drie niveaus. Het eerste niveau definieert de databasesleutels. Het tweede definieert de databasetargets. De waarde van elk target bevat de verbindingsinformatie voor die sleutel/target. Enkele voorbeelden maken dit duidelijker.

$databases['default']['default'] = array(
  'driver' => 'mysql',
  'database' => 'drupaldb',
  'username' => 'username',
  'password' => 'secret',
  'host' => 'localhost',
);

De bovenstaande array definieert één connectiesleutel ("default") met één target ("default"). Deze verbinding gebruikt een MySQL-database (driver) op de localhost met de databasenaam "drupaldb", gebruikersnaam "username" en wachtwoord "secret". Dit is een typisch voorbeeld voor een standaard Drupal-installatie met één SQL-server, en voldoet voor de meeste sites.

Voor een primary/replica-configuratie kun je bijvoorbeeld dit definiëren:

$databases['default']['default'] = array(
  'driver' => 'mysql',
  'database' => 'drupaldb1',
  'username' => 'username',
  'password' => 'secret',
  'host' => 'dbserver1',
);
$databases['default']['replica'][] = array(
  'driver' => 'mysql',
  'database' => 'drupaldb2',
  'username' => 'username',
  'password' => 'secret',
  'host' => 'dbserver2',
);
$databases['default']['replica'][] = array(
  'driver' => 'mysql',
  'database' => 'drupaldb3',
  'username' => 'username',
  'password' => 'secret',
  'host' => 'dbserver3',
);

Dit definieert één "default"-server en twee "replica"-servers. Merk op dat "replica" een array is. Als een target is gedefinieerd als een array van verbindingen, wordt bij elke paginaverzoek willekeurig één van de servers gekozen voor dat target. Bijvoorbeeld: bij het ene verzoek worden alle replica-queries naar dbserver2 gestuurd, en bij het volgende naar dbserver3.

$databases['default']['default'] = array(
  'driver' => 'mysql',
  'database' => 'drupaldb1',
  'username' => 'username',
  'password' => 'secret',
  'host' => 'dbserver1',
);
$databases['extra']['default'] = array(
  'driver' => 'sqlite',
  'database' => 'files/extradb.sqlite',
);

Deze configuratie definieert één primaire Drupal-database en een extra database "extra" die SQLite gebruikt. Let op dat de verbindingsinformatie voor SQLite anders is opgebouwd dan voor MySQL. Elke driver kan verschillende configuratie vereisen.

Onthoud dat, ongeacht hoeveel verbindingen je definieert, Drupal pas een verbinding opent wanneer die effectief wordt gebruikt.

Vereiste PDO

Aangezien de PHP-bibliotheek PDO nu vereist is voor het databasesysteem van Drupal, heb je een hostingplan nodig dat PDO ondersteunt om Drupal te draaien.

PDO-opties

PDO-opties en driver-specifieke PDO-opties kunnen worden meegegeven in de database-array met de sleutel 'pdo', bijvoorbeeld:

$databases['default']['default'] = array(
  'driver' => 'mysql',
  'database' => 'drupaldb',
  'username' => 'username',
  'password' => 'secret',
  'host' => 'dbserver1',
  'pdo' => array(PDO::ATTR_TIMEOUT => 2.0, PDO::MYSQL_ATTR_COMPRESS => 1),
);