Annotation de propriété @store
-
/** * @store string * @var string[] */ public $property;
Modifie la façon dont la valeur de
$property
est stockée en base par les liens de données.@store string
Force le stockage de la valeur de la propriété sous forme d’une chaîne de caractères.
- Si le type de la propriété est un
object
, c’est sa valeur sous forme de chaîne de caractères qui sera stockée, issue destrval($this->property)
ou encore$this->property->__toString()
si la méthode correspondante est définie.
- Si le type de la propriété est un tableau
array
ouobject[]
, c’est sa valeur sérialisée qui sera stockée.
La sérialisation PHP a été préférée au stockage de structure JSON de façon à permettre le stockage de tableaux d’objets également par ce biais, qui seront reconstitués à la lecture des données.
Stockage implicite sous forme de chaînes de caractères
Les propriétés de type tableau d’éléments basiques (
boolean[]
,integer[]
,float[]
,string[]
) sont déjà implicitement stockées sous forme d’une chaîne de caractère sérialisée au format JSON. Exception : pourstring[]
, la liste de chaînes de caractères, séparées par des virgules, est sauvegardée sans les accolades ni les guillemets JSON, par exemple chaîne 1, chaîne2.
Leur valeur est automatiquement restaurée dans le type d’origine à la lecture de données.
L’annotation @store est donc sans effet sur ces propriétés.@store hex
Cette option permet de stocker des chaînes qui pourraient contenir des données binaires perturbantes pour les moteurs de stockage : corps d’emails contenant des fichiers, fichiers binaires notamment PDF. Utilisez cette option d’annotation lorsque le stockage de vos données génère parfois des erreurs dues au contenu des données stockées.
- Si le type de la propriété est un
string
(chaîne de caractères) : force le stockage de la valeur texte de la propriété dans les liens de données au format hexadécimal.
- Si le type de la propriété est un
object
, unarray
ou unobject[]
, la valeur est sérialisée et stockée en utilisant des fonctions de stockage hexadécimal. Pour ces types de données le stockage de la valeur dans le lien de données sera identique à un @store string.
Exemple dans la classe
Email
du framework :
/** * @max_length 10000000 * @multiline * @store hex * @var string */ public $content;
@store gz
Demande d’enregistrer les données sous forme compressée avec l’algorithme deflate.
@store false
Indique que la propriété ne doit pas être enregistrée par le lien de données : aucun espace de stockage ne sera prévu pour cette propriété.
Cette option est utile notamment pour des propriétés calculées à l’aide d’un @getter et dont on ne veut pas stocker la valeur. - Si le type de la propriété est un