DynamicCacheBuilder
Pure cache-bouwer voor metadata.cache.values.{lang}.*. Geen DB-dependency: zelfde class is herbruikbaar tussen Framework, easyhandling en library.
shouldCache — encrypted/PASSWORD/USER/FILE/DYNAMIC_FORM uitsluiten
Zelfde regels als easyhandling::shouldCacheFieldValue(). Cleartext-velden mogen, gevoelige niet.
$title = new DynamicTypeField(id: 1, typeId: 1, name: 'title', datatype: 1, encrypted: false);
$pw = new DynamicTypeField(id: 2, typeId: 1, name: 'password', datatype: 37, encrypted: false);
$secret = new DynamicTypeField(id: 3, typeId: 1, name: 'secret', datatype: 1, encrypted: true);
return [
'title' => DynamicCacheBuilder::shouldCache($title),
'password' => DynamicCacheBuilder::shouldCache($pw),
'secret' => DynamicCacheBuilder::shouldCache($secret),
];Array
(
[title] => 1
[password] =>
[secret] =>
)
buildForLanguage — taalspecifiek wint van taalvrijgesteld
Een rij met language='' is een fallback. Komt er ook een rij met language='nl' voor hetzelfde veld, dan wint die.
$fields = [
'title' => new DynamicTypeField(10, 1, 'title', 1, false),
'logo' => new DynamicTypeField(20, 1, 'logo', 1, false),
];
$rows = [
['field_id' => 10, 'language' => '', 'value' => 'Hello (fallback)'],
['field_id' => 10, 'language' => 'nl', 'value' => 'Hallo (NL)'],
['field_id' => 20, 'language' => '', 'value' => 'logo.png'], // taalvrijgesteld
];
return DynamicCacheBuilder::buildForLanguage($fields, $rows, 'nl');Array
(
[title] => Hallo (NL)
[logo] => logo.png
)
buildAll — taalvrijgestelde velden worden onder elke taal gedupliceerd
Bewuste keuze: read-pad hoeft maar één JSON-tak te lezen, geen merge in SQL. Wel duplicatie van bv. logo.png onder elke taal.
$fields = [
'title' => new DynamicTypeField(10, 1, 'title', 1, false),
'logo' => new DynamicTypeField(20, 1, 'logo', 1, false),
];
$rows = [
['field_id' => 10, 'language' => 'nl', 'value' => 'Hallo'],
['field_id' => 10, 'language' => 'en', 'value' => 'Hello'],
['field_id' => 20, 'language' => '', 'value' => 'logo.png'],
];
return DynamicCacheBuilder::buildAll($fields, $rows, ['nl', 'en']);Array
(
[nl] => Array
(
[title] => Hallo
[logo] => logo.png
)
[en] => Array
(
[title] => Hello
[logo] => logo.png
)
)
Skip-list filtert in buildAll
Wachtwoorden of file-uploads gaan ook via DynamicItemsValues, maar mogen niet in cleartext-cache landen.
$fields = [
'email' => new DynamicTypeField(10, 1, 'email', 1, false),
'password' => new DynamicTypeField(11, 1, 'password', 37, false),
];
$rows = [
['field_id' => 10, 'language' => 'nl', 'value' => 'a@b.nl'],
['field_id' => 11, 'language' => 'nl', 'value' => 'GEHEIM'],
];
return DynamicCacheBuilder::buildAll($fields, $rows, ['nl']);Array
(
[nl] => Array
(
[email] => a@b.nl
)
)