ABI Model Pattern es una biblioteca con una interfaz gráfica diseñada para inicializar modelos, propiedades de modelos y también para definir un conjunto de reglas para cada propiedad. Los modelos creados son necesarios para almacenar la "estructura" de los datos, lo que limita la integridad y la simplicidad de cambiar las condiciones para su verificación. Todos los ajustes necesarios para que la biblioteca funcione se almacenan en un archivo de configuración separado, la base de datos se usa solo en el caso de modelos vinculantes para crear un esquema si es necesario. La funcionalidad para vincular el modelo a la base de datos se describirá a continuación.
Me preguntaron dos veces: "Dígame, señor Babbage, y si ingresa los datos incorrectos en la máquina, ¿obtendrá la respuesta correcta?" La incomprensibilidad de la confusión en la cabeza que lleva a tales preguntas.
Charles Babbage, "Extractos de la vida de un filósofo" (1864)Es necesaria una interfaz gráfica para la conveniencia de crear modelos sin un estudio adicional de la lógica de la biblioteca, así como para validar las acciones del usuario al definir un conjunto de reglas para las propiedades del modelo, cambiar dinámicamente el formulario de creación y mostrar los errores correspondientes. Configuración del registrador y conexiones de base de datos.
Para crear un modelo en la interfaz de la biblioteca, es necesario determinar sus propiedades y condiciones de verificación de datos para estas propiedades. La clase de biblioteca Validator compara los datos de cada parámetro de entrada con las condiciones de la propiedad del modelo especificado para formar la Entidad y, en caso de una falta de coincidencia, termina con un cierto error.
Un modelo formado (Entidad) es un objeto con un conjunto experimentado de propiedades que almacena los datos transmitidos para su creación. Cada propiedad puede ser requerida y no requerida.
- Los datos de una propiedad requerida deben pasarse para formar una entidad;
- Una propiedad opcional almacena datos especificados por defecto si los datos de esta propiedad no se han transferido.
Dado que cada entidad es una instancia del tipo correspondiente, la instancia del operador se puede utilizar para verificar que pertenece al tipo especificado.
Cada modelo creado es un nuevo tipo que puede usarse para crear las siguientes propiedades del modelo. Un tipo personalizado se puede usar tanto en un tipo de propiedad como en una colección de tipos. Un ejemplo simple es el modelo de cupón como un tipo de propiedad en el modelo de pedido.
Modelo de cupón:

Modelo de pedido:

Se puede usar una colección de tipos en el caso de un número desconocido de elementos en una matriz u objeto. Los datos de cada elemento de dicha estructura de datos deben corresponder a las condiciones del modelo creado, que se utiliza como tipo de propiedad. Un ejemplo de una colección de tipos se puede considerar de la siguiente manera:
Un carrito de compras puede almacenar una cantidad desconocida de productos. En el modelo "Pedido", agregue la propiedad "Productos" con el tipo "Matriz" y la colección del tipo "Producto". Cada elemento de dicha estructura de datos debe corresponder a un tipo de "Producto".
Modelo del producto:

Modelo de pedido:

Para asociar un modelo con una base de datos, es necesario establecer el indicador "bind_db" para cada propiedad o propiedades individuales en las páginas Crear / Editar del modelo. El nombre de la tabla corresponde al nombre del modelo y las columnas de esta tabla corresponden a las propiedades asociadas del modelo, incluido el conjunto de reglas especificadas para ellos. La estructura de las tablas vinculadas con modelos cambia si se realizan cambios en el modelo.
Un ejemplo de un modelo de "pedido" relacionado en la base de datos
Antes de conectar el modelo y sus propiedades a la base de datos, debe configurar la conexión a la base de datos en la interfaz de la biblioteca en la página correspondiente.
En la versión actual de la biblioteca, es posible usar solo una base de datos MySQL y un conjunto limitado de tipos MySQL.
Esta biblioteca carece de funcionalidad para escribir Entity en la base de datos, así como para eliminar registros. Al crear dicha funcionalidad definida por el usuario, tenga en cuenta que al cambiar las propiedades del modelo asociadas con la base de datos, la estructura de la tabla cambiará y, cuando se elimine el modelo, se eliminará la tabla.
Para usar el registrador, debe habilitarlo y configurarlo en una página separada de la interfaz de la biblioteca.
Cree modelos para todos los parámetros de funciones, colecciones de datos, consultas, respuestas de consultas y otros parámetros necesarios para la validación de datos. Esto es necesario para eliminar errores inesperados durante la ejecución de la aplicación y aumentar el control de datos para su posterior procesamiento.
La clase de biblioteca Parser es necesaria para iterar sobre los parámetros de entrada en la colección pasada para crear una Entidad. El analizador itera y encuentra en la colección transferida solo aquellos parámetros que son necesarios para crear la Entidad. La enumeración de parámetros no se realiza de forma recursiva. Un ejemplo de obtención de datos en la API private24 y creación del modelo Entity ATM.
Modelo de cajero automático:

Modelo de dispositivo:
URL de solicitud de Private24 API:api.privatbank.ua/p24api/infrastructure?json&atm&address=&city=%D0%96%D0%BE%D0%BB%D0%BA%D0%B2%D0%B0Respuesta de Private24 API:respuesta{ "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" } } ] }
Entidad creadora: try {

$atm_devices = $available_atms->devices;

} catch (Exception $e) { $error_message = $e->getMessage(); }
Agregue una línea para eliminar "dispositivos" de la variable $ request_body, iniciando una de las posibles respuestas inapropiadas:
unset($request_body->devices);
La regla "requerida" se estableció en la propiedad "dispositivos" del modelo "ATM" creado anteriormente. Habiendo eliminado "dispositivos" de "$ request_body", una vez más creamos Entity y obtenemos el siguiente error:

Los últimos errores registrados por la clase Logger se han agregado a la página correspondiente en la interfaz. Se ve así:

Instalación de la biblioteca
- Descargue la última biblioteca
- Descomprima el archivo descargado en el directorio donde desea instalar la biblioteca.
- Para instalar dependencias para esta biblioteca, ejecute el comando de instalación desde el directorio "abi" de la biblioteca - "instalación del compositor"
- Asegúrese de habilitar el módulo Apache mod_rewrite y verifique que su host virtual esté configurado con el parámetro AllowOverride.
- Verifique y, si es necesario, establezca los atributos para el archivo de configuración de la biblioteca con permisos de lectura y escritura (0666).
- Después de instalar la biblioteca, use el nombre de usuario admin y la contraseña admin para ingresar a la interfaz gráfica de la biblioteca.
→
Enlace al repositorioMuchas gracias por la ayuda y el apoyo de
denaikG