ABI模型模式v0.5.6 Beta

ABI模型模式是一个带有图形界面的库,该界面旨在初始化模型,模型属性以及为每个属性定义一组规则。 创建的模型对于存储数据的“结构”是必需的,从而限制了更改验证条件的完整性和简便性。 库工作所需的所有设置都存储在单独的配置文件中,该数据库仅在绑定模型的情况下用于创建方案(如有必要)。 下面将描述将模型链接到数据库的功能。



他们两次问我:“告诉我,巴贝奇先生,如果您在机器中输入错误的数据,您会得到正确的答案吗?” 导致这些问题的头部混乱无法理解。

查尔斯·巴贝奇(Charles Babbage),《哲学家生平摘录》(1864)

为了方便创建模型而无需进一步研究库逻辑,以及在定义模型属性的规则集,动态更改创建形式并显示相应错误时验证用户操作,图形界面是必需的。 记录器设置和数据库连接。

要在库界面中创建模型,必须确定其属性以及这些属性的数据验证条件。 Validator库类将每个输入参数的数据与指定模型的属性条件进行比较以形成Entity,并且在发生不匹配的情况下终止于特定错误。

形成的模型(实体)是具有一组经验丰富的属性的对象,用于存储为创建而传输的数据。 每个属性可能都是必需的,而不是必需的。

  1. 必须传递必需属性的数据以形成实体;
  2. 如果尚未传输该属性的数据,则可选属性存储默认情况下指定的数据。

由于每个实体都是相应类型的实例,因此可以使用instanceof运算符来验证它是否属于指定的类型。

创建的每个模型都是新类型,可用于创建以下模型属性。 可以在属性类型和类型集合中使用自定义类型。 一个简单的示例是Coupon模型,它是Order模型中的一种属性。

优惠券型号:




订单型号:




在数组或对象中元素数量未知的情况下,可以使用类型集合。 这种数据结构的每个元素的数据必须与创建的模型的条件相对应,该模型用作属性的类型。 类型集合的示例可以考虑如下:
购物车可能存储未知数量的产品。 在“订单”模型中,使用“数组”类型和“产品”类型的集合添加“产品”属性。 这种数据结构的每个元素必须对应一个“产品”类型。

产品型号:




订单型号:




要将模型与数据库关联,必须在模型的“创建/编辑”页面上为每个或单个属性设置“ bind_db”标志。 表的名称与模型的名称相对应,此表的列与模型的关联属性相对应,包括为其指定的规则集。 如果对模型进行了更改,则带有模型的链接表的结构也会发生变化。

数据库中相关“订单”模型的示例



在将模型及其属性连接到数据库之前,需要在相应页面的库界面中配置到数据库的连接。

在该库的当前版本中,可以仅使用一个MySQL数据库和一组有限的MySQL类型。

该库缺少用于将Entity写入数据库以及删除记录的功能。 创建此类用户定义的功能时,请注意,更改与数据库关联的模型属性时,表结构将更改,而删除模型时,表将被删除。

要使用记录器,必须启用它并在库界面的单独页面中对其进行配置。

为所有功能参数,数据收集,查询,查询响应以及其他用于数据验证的必要参数创建模型。 这对于消除应用程序执行期间的意外错误和增加数据控制以进行进一步处理是必要的。

需要Parser库类来遍历传递的集合中的输入参数以创建实体。 解析器遍历并仅在传输的集合中找到创建实体所需的那些参数。 参数的枚举不是递归执行的。 在private24 API中获取数据并创建实体ATM模型的示例。

自动取款机型号:




Atmdevice型号:



Private24 API请求网址:

api.privatbank.ua/p24api/infrastructure?json&atm&address=&city=%D0%96%D0%BE%D0%BB%D0%BA%D0%B2%D0%B0

Private24 API响应:

回应
{ "city":"", "address":"", "devices":[ { "type":"ATM", "cityRU":"", "cityUA":"", "cityEN":"Zhovkva", "fullAddressRu":", , , , , 1", "fullAddressUa":"i, i, i,i , i, 1", "fullAddressEn":"Ukraine,area Lvivska,district Zhovkivskyi,city Zhovkva,building 1", "placeRu":" \"\"", "placeUa":"i \"\"", "latitude":"50.056405", "longitude":"23.972725", "tw":{ "mon":"09:00 - 18:00", "tue":"09:00 - 18:00", "wed":"09:00 - 18:00", "thu":"09:00 - 18:00", "fri":"09:00 - 18:00", "sat":"09:00 - 16:00", "sun":"00:00 - 00:00", "hol":"00:00 - 00:00" } }, { "type":"ATM", "cityRU":"", "cityUA":"", "cityEN":"Zhovkva", "fullAddressRu":", , , , , 33", "fullAddressUa":"i, i, i,i , i, 33", "fullAddressEn":"Ukraine,area Lvivska,district Zhovkivskyi,city Zhovkva,building 33", "placeRu":" \"\"", "placeUa":" \"i\"", "latitude":"50.055840", "longitude":"23.981580", "tw":{ "mon":"09:00 - 18:00", "tue":"09:00 - 18:00", "wed":"09:00 - 18:00", "thu":"09:00 - 18:00", "fri":"09:00 - 18:00", "sat":"09:00 - 16:00", "sun":"00:00 - 00:00", "hol":"00:00 - 00:00" } } ] } 


创建实体:

 try { // Include the composer autoloader require_once('PATH_TO_ABI_LIBRARY/abi/vendor/autoload.php'); $prv24_atms_url = 'https://api.privatbank.ua/p24api/infrastructure?json&atm&address=&city=%D0%96%D0%BE%D0%BB%D0%BA%D0%B2%D0%B0'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $prv24_atms_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); $prv24_response = curl_exec($ch); curl_close($ch); $request_body = json_decode($prv24_response); $available_atms = \ABI\classes\Entity::getEntity($request_body, 'atm'); 



 $atm_devices = $available_atms->devices; 



 } catch (Exception $e) { $error_message = $e->getMessage(); } 

添加一行以从变量$ request_body中删除“ devices”,从而启动可能的不当答案之一:

 unset($request_body->devices); 

在先前创建的“ ATM”模型的“设备”属性中设置了“必需”规则。 从“ $ request_body”中删除“ devices”后,我们再次创建Entity并得到以下错误:



Logger类最新记录的错误已添加到界面中的相应页面。 看起来像这样:



库安装


  1. 下载最新
  2. 将下载的归档文件解压缩到要安装库的目录中。
  3. 要安装此库的依赖项,请从库的“ abi”目录中运行安装命令-“ composer install”
  4. 确保启用Apache mod_rewrite模块,并验证是否为虚拟主机配置了AllowOverride参数。
  5. 检查并根据需要设置具有读取和写入权限的库配置文件的属性(0666)。
  6. 安装库后,使用用户名 admin和密码 admin进入库图形界面。

链接到存储库

非常感谢denaikG的帮助和支持

Source: https://habr.com/ru/post/zh-CN416829/


All Articles