DynamicStructure
load() doet 2 queries (types + alle velden). loadCached() serialiseert naar disk per cacheKey, zodat meerdere sites elkaar niet overschrijven.
load() — 2 queries, daarna O(1) lookups
PDO is alleen tijdens load() nodig. De resulterende structure heeft geen DB-state meer.
$structure = DynamicStructure::load($pdo);
return [
'aantal types' => count($structure->all()),
'eerste 5' => array_slice(
array_map(fn($t) => $t->name, $structure->all()),
0, 5,
),
];Array
(
[aantal types] => 433
[eerste 5] => Array
(
[0] => base_layer
[1] => styles
[2] => page
[3] => interface_carousel
[4] => form_availability_date
)
)
metadata.extends — eigen velden overschrijven geërfde
Als een type metadata.extends heeft, krijgt fieldsForType() ook de geërfde velden. Eigen velden hebben voorrang.
$structure = DynamicStructure::loadCached($pdo, cacheKey: $cacheKey);
// Pak een type met metadata.extends om inheritance te zien:
$found = null;
foreach ($structure->all() as $type) {
if (!empty($type->metadata['extends'])) {
$found = $type;
break;
}
}
return $found
? ['type' => $found->name . ' (id=' . $found->id . ')', 'velden' => array_keys($structure->fieldsForType($found->id))]
: 'geen type met extends gevonden';Array
(
[type] => page (id=3)
[velden] => Array
(
[0] => title
[1] => logo
[2] => theme_color_1
)
)
loadCached — file-cache met unieke key per bron
Tweede call leest serialize(self) van disk; PDO wordt dan niet meer aangesproken. Cache-bestand: data/cache/structures/{key}.dat
$structure = DynamicStructure::loadCached(
$pdo,
cacheKey: $cacheKey, // uniek per database
ttl: 3600, // null = oneindig
);
return ['types' => count($structure->all()), 'cacheKey' => $cacheKey];Array
(
[types] => 433
[cacheKey] => demo.nl
)
invalidate — cache-file weggooien
Statisch — geen instance nodig. Volgende loadCached() hit dan altijd de DB.
DynamicStructure::invalidate('site-easyhandling');void — verwijdert het bestand als het bestaat. Niet aangeroepen in deze demo.