fabiomattei / uglyduckling
使用json结构创建Web应用的框架
Requires
- php: >=7.4
- wixel/gump: dev-master
Requires (Dev)
- etsy/phan: ^4.0
- phpunit/phpunit: ^8
This package is auto-updated.
Last update: 2024-10-01 20:58:04 UTC
README
文档
如果您想了解项目的更完整描述,请查看文档网站:https://www.uddocs.com/
演示
这个演示展示了库的主要功能。
最好的代码是你不需要写的代码
我编写这段代码是为了避免重复编写相同的内容。我多年来一直在编写Web应用。那些应用做什么?从表单中获取数据,将数据保存到数据库中,然后在另一个表单中编辑这些数据,并在表格或图表中显示这些数据,有时还会删除这些数据(老实说,不经常)。
我一次又一次地这样做,一个表接一个表,ORM接ORM,MVC接MVC。
我感觉迷茫和无聊。我工作非常努力,但取得的成就很小。
我学习了许多框架来加快我的工作流程,我阅读了很多书籍:新技术,如此令人兴奋!
然后我开始注意到我的工作是可以重复的,而那些框架使我慢了下来。
使用MVC方法,您要为应用程序进行的每个更改至少需要打开3个文件。
所以我开始想:我真的需要什么来制作一个包含从数据库获取数据的表格?答案是:我需要执行一个SQL查询,我需要定义表格的结构,并将查询结果放在表格上。仅此而已。我只需要这三样东西,不需要更多。
我把所有这些信息放在一个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"} ] } }
没有ORM,没有MVC,一个不干涉我的框架。
我知道我使用了SQL而不是ORM,但我喜欢SQL!SQL已经很多年没有变化了,这意味着它有效!老了也不算什么坏事!
我给表格起了一个标题,并在字段数组中定义了标题和从查询中获取的sql字段,以填充表格的单元格。你解决过多少次这样的简单问题?你曾经写过更少的代码吗?如果是这样,请告诉我!
我知道你在想什么:这不够通用,如果需要执行计算或泛化某些逻辑或做更复杂的事情怎么办?好吧,你总是可以回到老方法,编写控制器和视图,可能是由部分组成的,连接ORM,写下你的模型,等等...
但,让我们直言不讳,你真的需要它吗?你多久做一次这样的事情?我经常发现自己只是用一条查询的结果填充一个表格,可能还涉及几个连接的表。
让我们添加一些链接
如果我需要在表格中添加到一些支持操作的链接怎么办?我在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"}] } ] } }
一个链接由一个标签(用户需要看到的点击内容)、一个操作和一些可能来自SQL查询的参数定义。
如果您想知道什么是资源,它是一个索引,用于在系统中查找特定的json配置文件,就像这个一样。有用于表单、PDF导出、数据图表等的资源。如果您需要更多,您可以始终定义一个新的模板,毕竞这是一个开源项目。
让我们完成这个json文件
为了完成文件,有一些事情要做。我们需要给它一个名字,这样我们才能在所有资源中找到它。我们需要添加一些元数据,以防未来需要添加更多功能。
系统支持允许组访问特定资源的概念,这解释了"allowedgroups"数组。
这个文件中有一个get部分,它之所以存在,是因为所有这些配置都是针对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"}] } ] } } }
如果您可以使用标准模板,您只需将所需的全部资源填充到src/Custom文件夹中,就可以制作整个应用程序。打开该文件夹,看看其他资源是如何定义的。