Si vous recherchez une description plus complète du projet, consultez le site de documentation: https://www.uddocs.com/
Cette démo montre les principales caractéristiques de la bibliothèque.
J'ai écrit ce code afin d'éviter d'écrire encore et encore les mêmes choses. J'écris des applications Web depuis de nombreuses années. Que faisaient ces applications? Ils tiraient des données à partir d'un formulaire, enregistrant ces données dans une base de données, puis éditant ces données sous une autre forme et montrant que les données dans un tableau ou dans une annonce diagramme, ils supprimaient parfois ces données (pas très souvent pour être juste).
Eh bien, je l'ai fait encore et encore, forme après forme, orm après orm, MVC après MVC.
Je me sentais perdu et ennuyé. Je travaillais si dur et j'accomplissais si peu.
J'ai appris de nombreux framework pour accélérer mon processus, j'ai lu de nombreux livres: la nouvelle chose, alors sortant!
Ensuite, j'ai commencé à remarquer que mon travail était reproductible et que ces cadres me ralentissaient.
Avec une approche MVC, chaque modification que vous vous demandez à apporter à votre application vous oblige à ouvrir au moins 3 fichiers.
J'ai donc commencé à me demander: de quoi ai-je vraiment besoin pour faire par exemple une table de cotation de table tirée dans une base de données? La réponse était: je dois faire une requête SQL, je dois définir la structure de la table et je dois mettre les résultats de la requête sur la table. C'est ça. J'ai besoin de ces trois choses, rien de plus que cela.
J'ai mis toutes ces informations dans un fichier JSON et cela est sorti:
{
"query" : {
"sql" : " select id, name, amount, duedate FROM requestv1; "
},
"table" : {
"title" : " My table " ,
"fields" : [
{ "headline" : " Name " , "sqlfield" : " name " },
{ "headline" : " Amount " , "sqlfield" : " amount " },
{ "headline" : " Due date " , "sqlfield" : " duedate " }
]
}
}Pas d'ORM, pas de MVC et un cadre qui reste à l'écart.
Je sais que j'ai utilisé SQL et pas un ORM mais j'aime SQL! SQL n'a pas changé depuis des lustres, et cela signifie que cela fonctionne! Ce n'est pas triste d'être vieux!
J'ai donné un titre à la table et dans le tableau des champs, j'ai défini les gros titres et les champs SQL qui ont été tirés de la requête afin de remplir les cellules de ce tableau. Combien de fois avez-vous résolu ce même problème simple? L'avez-vous déjà fait en écrivant moins de code? Si c'est vrai, faites-le moi savoir!
Je sais à quoi vous pensez: ce n'est pas assez général, que se passe-t-il si j'ai besoin de faire des calculs ou de généraliser une logique ou de faire quelque chose de plus compliqué? Eh bien, vous pouvez toujours revenir à votre ancienne voie et programmer un contrôleur une vue, peut-être fait de partiels, connecter et orm, noter votre modèle et ... ainsi de suite et ainsi de suite ...
Mais, soyons droits, en avez-vous vraiment besoin? À quelle fréquence faites-vous cela? J'ai souvent trouvé Mysel remplissant une table avec les résultats d'une seule requête, peut-être avec peu de tables jointes.
Et si je dois ajouter un lien à une action prise en charge à la table? J'ai également défini cela dans le format JSON.
{
"query" : {
"sql" : " select id, name, amount, duedate FROM requestv1; "
},
"table" : {
"title" : " My table " ,
"fields" : [
{ "headline" : " Name " , "sqlfield" : " name " },
{ "headline" : " Amount " , "sqlfield" : " amount " },
{ "headline" : " Due date " , "sqlfield" : " duedate " }
],
"actions" : [
{ "label" : " Info " , "resource" : " inforequest " , "parameters" :[{ "name" : " id " , "sqlfield" : " id " }] },
{ "label" : " Edit " , "resource" : " formrequest " , "parameters" :[{ "name" : " id " , "sqlfield" : " id " }] },
{ "label" : " Delete " , "resource" : " deletereport " , "parameters" :[{ "name" : " id " , "sqlfield" : " id " }] }
]
}
}Un lien est défini à partir d'une étiquette (l'utilisateur doit voir ce qui clique) une action et peu de paramètres provenant peut-être de la requête SQL.
Si vous vous demandez ce qu'est une ressource, c'est un index pour trouver un fichier de configuration JSON spécifique, comme celui-ci, dans le système. Il existe des ressources pour les formulaires, pour les exportations PDF, pour les graphiques de données, pour tout ce dont vous avez besoin. Et si vous en avez besoin de plus, vous pouvez toujours définir un nouveau modèle, il s'agit d'un projet open source après tout.
Il y a peu de choses à faire pour terminer le fichier. Nous ne venons pas de lui donner un nom afin que nous puissions le trouver entre les ressources. Nous devons ajouter des métadonnées, au cas où à l'avenir, nous devons ajouter plus de fonctionnalités.
Le système prend en charge le concept de groupes autorisés pour accéder à une ressource spécifique, ce qui explique le tableau "AutaitedGroups".
Il y a une section GET dans ce fichier, c'est là car toutes ces configurations sont destinées à une demande GET.
{
"name" : " requesttablev1 " ,
"metadata" : { "type" : " table " , "version" : " 1 " },
"allowedgroups" : [ " administrationgroup " , " teachergroup " , " managergroup " ],
"get" : {
"request" : {
"parameters" : []
},
"query" : {
"sql" : " select id, name, amount, duedate FROM requestv1; "
},
"table" : {
"title" : " My table " ,
"fields" : [
{ "headline" : " Name " , "sqlfield" : " name " },
{ "headline" : " Amount " , "sqlfield" : " amount " },
{ "headline" : " Due date " , "sqlfield" : " duedate " }
],
"actions" : [
{ "label" : " Info " , "resource" : " inforequest " , "parameters" :[{ "name" : " id " , "sqlfield" : " id " }] },
{ "label" : " Edit " , "resource" : " formrequest " , "parameters" :[{ "name" : " id " , "sqlfield" : " id " }] },
{ "label" : " Delete " , "resource" : " deletereport " , "parameters" :[{ "name" : " id " , "sqlfield" : " id " }] }
]
}
}
}Si vous pouvez utiliser les modèles standard, vous pouvez faire une application entière remplissant simplement le dossier SRC / personnalisé avec toutes les ressources dont vous avez besoin. Ouvrez ce dossier et jetez un coup d'œil afin que vous puissiez voir comment les autres ressources sont définies.