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
        )

)