Annotation de classe @set
-
Redirected from @set
/** * @set Class_Names */ class Class_Name
Description
L’annotation @set, appliquée à une classe, indique quelle est la déclinaison au pluriel du nom de la classe.
Valeur par défaut
Si cette annotation n’est pas précisée, elle prend par défaut un calcul automatique du pluriel du nom de la classe.
Ce calcul applique des règles simple et peut être incomplet. Pour forcer le pluriel correct du nom de la classe, précisez la valeur de @set.Usages
- Reconnaissance des chemins de classes dans les URI.
Par exemple pour une classe Salesman et son pluriel défini@set Salesmen
: l’URI /Vendor/Project/Salesmen fait référence à un ensemble deVendor\Project\Salesman
: le contrôleur par défaut pour un chemin de classe reconnu comme étant le pluriel d’une classe est dataList.
- Etablissement du nom du stockage en base de données d’un ensemble d’objets par défaut de la classe. Pour le même exemple que ci-dessus, à défaut d’autre précision dans l’annotation de classe @store_name, la table qui stocke les objets
Salesman
en base de données se nommera salesmen, soit le nom final de la classe correspondant à son @set, tout en minuscules.
Règles à savoir et respecter
- @set ne peut définir un nom de classe au pluriel que dans le même namespace que sa classe au singulier. Le nom de classe “virtuel” indiqué dans @set doit donc toujours être relatif au namespace courant, et ne doit jamais contenir de namespace, donc de caractère back-slash.
- @set doit être exactement le même nom que la classe, simplement décliné au pluriel, donc avec le même nombre de mots. Dans des cas exceptionnels, on peut rajouter un mot
_Set
en queue, pour décliner le pluriel d’un mot invariant en traduisant “un ensemble de …”, mais ce n’est pas forcément l’usage recommandé.
- Dans le cas d’un mot invariant, le pluriel défini par @set peut très bien être exactement être le même nom que le nom de la classe. Dans ce cas penser que les contrôleurs pour l’accès au pluriel comme pour la fonctionnalité dataList devront être appelés explicitement, le framework n’étant plus en mesure de distinguer un nom de classe au pluriel d’un nom au singulier dans ce cas particulier.
- Attention à l’héritage : dans un arbre de classes héritées, tant qu’aucune classe ne définit @set, sa valeur est toujours calculée par rapport au nom de chaque classe.
Dès qu’une classe définit explicitement @set, toutes ses classes filles auront cette même valeur de @set définie par leur parente tant qu’elles-mêmes ne la re-définissent pas.
Si les classes filles n’ont pas le même nom court qu’une classe parente, il faudra donc explicitement redéfinir leur propre valeur de @set pour respecter les règles de correspondance des noms.
Remarque : le nom court de la classe est hérité, toutefois c’est bien le namespace de la classe fille qui y sera appliquée, tant qu’il n’est pas défini explicitement par le parent.
- classe parent
Some\Parent\Name
: pas de @set, la valeur sera donc calculée Some\Parent\Names - classe fille
Some\Parent\Thing
: toujours pas de @set, la valeur sera donc calculée Some\Parent\Things - classe fille
Some\Child\Thing
avec@set Things
: la valeur sera donc Some\Child\Things - classe fille
Some\Other\Stuff
sans @set : attention, la valeur est héritée mais le namespace mis à jour, la valeur sera donc Some\Other\Things
- Reconnaissance des chemins de classes dans les URI.