65 lines
2.6 KiB
Markdown
65 lines
2.6 KiB
Markdown
# nulib\schema
|
|
|
|
* ensureKeys() et orderKeys() se fait au niveau de access (ou input?)
|
|
* access/input ne pouvant pas connaître les valeurs appropriées, c'est le
|
|
schéma qui les génère. ensureKeys($values)
|
|
* méthode ensureAssoc() transforme les clés séquentielles en clés associatives
|
|
* l'ordre est ensureAssoc \[--> ensureKeys] \[--> orderKeys]
|
|
|
|
* valeurs composite/computed
|
|
* analyse / vérification de la valeur complète après calcul du résultat, si
|
|
tous les résultats sont bons
|
|
* calcul des valeurs composites/computed par une fonction avant/après l'analyse
|
|
globale si résultat ok
|
|
* fonction getter_func, setter_func, deleter_func pour les propriétés de type
|
|
computed
|
|
* tdate et tdatetime. qu'en est-il des autres classes (delay, etc.)
|
|
* possibilité de spécifier le format de la date à analyser
|
|
* ScalarSchema::from_property()
|
|
|
|
* dans AssocSchema, support `[key_prefix]` qui permet de spécifier un préfixe
|
|
commun aux champs dans le tableau destination, e.g
|
|
~~~php
|
|
$wrapper = Schema::ns($schema, [
|
|
"a" => "?string",
|
|
"b" => "?int",
|
|
])->newWrapper();
|
|
$value = ["x_a" => 5, "x_b" => "10"],
|
|
$wrapper->reset($value, null, [
|
|
"key_prefix" => "x_",
|
|
]);
|
|
# $value vaut ["x_a" => "5", "x_b" => 10];
|
|
~~~
|
|
définir si le préfixe doit être spécifié sur le schéma ou sur la valeur...
|
|
actuellement, le code ne permet pas de définir de tels paramètres...
|
|
|
|
alternative: c'est lors de la *définition* du schéma que le préfixe est ajouté
|
|
e.g
|
|
~~~php
|
|
$wrapper = Schema::ns($schema, [
|
|
"a" => "?string",
|
|
"b" => "?int",
|
|
], [
|
|
"key_prefix" => "x_",
|
|
])->newWrapper();
|
|
$value = ["x_a" => 5, "x_b" => "10"],
|
|
$wrapper->reset($value);
|
|
# $value vaut ["x_a" => "5", "x_b" => 10];
|
|
~~~
|
|
* actuellement, pour un schéma associatif, si on normalise un tableau séquentiel,
|
|
chaque valeur correspond à la clé de même rang, eg. pour un schéma
|
|
~~~php
|
|
const SCHEMA = ["first" => DEF, "second" => DEF];
|
|
const ARRAY = ["first", "second"];
|
|
~~~
|
|
la valeur normalisée de `ARRAY` est `["first" => "first", "second" => "second"]`
|
|
|
|
cependant, dans certaines circonstances (notamment pour des paramètres), on
|
|
devrait pouvoir considérer une valeur indexée comme un flag, i.e la valeur
|
|
normalisée de ARRAY serait `["first" => true, "second" => true]`
|
|
|
|
la définition de ces "circonstances" est encore à faire: soit un paramètre
|
|
lors de la définition du schéma, soit un truc magique du genre "toutes les
|
|
valeurs séquentielles sont des clés du schéma"
|
|
|
|
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary |