ABI Model Pattern v0.5.6 Beta

ABI Model Pattern est une bibliothèque avec une interface graphique conçue pour initialiser des modèles, des propriétés de modèle et également pour définir un ensemble de règles pour chaque propriété. Les modèles créés sont nécessaires pour stocker la «structure» des données, limitant l'intégrité et la simplicité de changer les conditions de leur vérification. Tous les paramètres nécessaires au fonctionnement de la bibliothèque sont stockés dans un fichier de configuration distinct, la base de données n'est utilisée que dans le cas de modèles de liaison pour créer un schéma si nécessaire. La fonctionnalité de liaison du modèle à la base de données sera décrite ci-dessous.



Ils m'ont demandé deux fois: "Dites-moi, M. Babbage, et si vous entrez les mauvaises données dans la machine, obtiendrez-vous la bonne réponse?" L'incompréhensibilité de la confusion dans la tête qui conduit à de telles questions.

Charles Babbage, "Extraits de la vie d'un philosophe" (1864)

Une interface graphique est nécessaire pour faciliter la création de modèles sans étude supplémentaire de la logique de la bibliothèque, ainsi que pour valider les actions de l'utilisateur lors de la définition d'un ensemble de règles pour les propriétés du modèle, en modifiant dynamiquement la forme de création et en affichant les erreurs correspondantes. Paramètres de l'enregistreur et connexions à la base de données.

Pour créer un modèle dans l'interface de bibliothèque, il est nécessaire de déterminer ses propriétés et les conditions de vérification des données pour ces propriétés. La classe de bibliothèque Validator compare les données de chaque paramètre d'entrée avec les conditions de la propriété du modèle spécifié pour former l'entité et, en cas de non-concordance, se termine avec une certaine erreur.

Un modèle formé (Entité) est un objet avec un ensemble de propriétés chevronné qui stocke les données transmises pour sa création. Chaque propriété peut être requise et non requise.

  1. Les données d'une propriété requise doivent être transmises pour former une entité;
  2. Une propriété facultative stocke les données spécifiées par défaut si les données de cette propriété n'ont pas été transférées.

Étant donné que chaque entité est une instance du type correspondant, l'opérateur instanceof peut être utilisé pour vérifier qu'elle appartient au type spécifié.

Chaque modèle créé est un nouveau type qui peut être utilisé pour créer les propriétés de modèle suivantes. Un type personnalisé peut être utilisé à la fois dans un type de propriété et dans une collection de types. Un exemple simple est le modèle Coupon en tant que type de propriété dans le modèle Order.

Modèle de coupon:




Modèle de commande:




Une collection de types peut être utilisée dans le cas d'un nombre inconnu d'éléments dans un tableau ou un objet. Les données de chaque élément d'une telle structure de données doivent correspondre aux conditions du modèle créé, qui est utilisé comme type de propriété. Un exemple de collection de types peut être considéré comme suit:
Un panier d'achat peut stocker une quantité inconnue de produits. Dans le modèle "Order", ajoutez la propriété "Products" avec le type "Array" et la collection du type "Product". Chaque élément d'une telle structure de données doit correspondre à un type «Produit».

Modèle de produit:




Modèle de commande:




Pour associer un modèle à une base de données, il est nécessaire de définir l'indicateur «bind_db» pour chacune des propriétés ou sur les pages de création / modification du modèle. Le nom de la table correspond au nom du modèle et les colonnes de cette table correspondent aux propriétés associées du modèle, y compris l'ensemble de règles qui leur est spécifié. La structure des tables liées avec des modèles change si des modifications sont apportées au modèle.

Un exemple de modèle «Order» associé dans la base de données



Avant de connecter le modèle et ses propriétés à la base de données, vous devez configurer la connexion à la base de données dans l'interface de bibliothèque sur la page correspondante.

Dans la version actuelle de la bibliothèque, il est possible d'utiliser uniquement une base de données MySQL et un ensemble limité de types MySQL.

Cette bibliothèque manque de fonctionnalités pour écrire Entity dans la base de données, ainsi que pour supprimer des enregistrements. Lors de la création de telles fonctionnalités définies par l'utilisateur, notez que lors de la modification des propriétés du modèle associées à la base de données, la structure de la table change et lorsque le modèle est supprimé, la table est supprimée.

Pour utiliser l'enregistreur, vous devez l'activer et le configurer dans une page distincte de l'interface de la bibliothèque.

Créez des modèles pour tous les paramètres de fonction, les collectes de données, les requêtes, les réponses aux requêtes et d'autres paramètres nécessaires à la validation des données. Cela est nécessaire pour éliminer les erreurs inattendues lors de l'exécution de l'application et augmenter le contrôle des données pour un traitement ultérieur.

La classe de bibliothèque Parser est nécessaire pour parcourir les paramètres d'entrée de la collection transmise afin de créer une entité. L'analyseur parcourt et ne trouve dans la collection transférée que les paramètres nécessaires à la création de l'entité. L'énumération des paramètres n'est pas effectuée de manière récursive. Un exemple d'obtention de données dans l'API private24 et de création du modèle d'entité «ATM».

Modèle ATM:




Modèle Atmdevice:



URL de demande de l'API Private24:

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

Réponse de l'API Private24:

réponse
{ "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" } } ] } 


Création d'une entité:

 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(); } 

Ajoutez une ligne pour supprimer les «périphériques» de la variable $ request_body, initiant l'une des réponses inappropriées possibles:

 unset($request_body->devices); 

La règle "requis" a été définie dans la propriété "devices" du modèle "ATM" précédemment créé. Après avoir supprimé les "appareils" de "$ request_body", nous créons à nouveau Entity et nous obtenons l'erreur suivante:



Les dernières erreurs enregistrées par la classe Logger ont été ajoutées à la page correspondante dans l'interface. Cela ressemble à ceci:



Installation de la bibliothèque


  1. Téléchargez la dernière bibliothèque
  2. Décompressez l'archive téléchargée dans le répertoire où vous souhaitez installer la bibliothèque.
  3. Pour installer les dépendances de cette bibliothèque, exécutez la commande d'installation à partir du répertoire «abi» de la bibliothèque - «composer install»
  4. Assurez-vous d'activer le module Apache mod_rewrite et vérifiez que votre hôte virtuel est configuré avec le paramètre AllowOverride.
  5. Vérifiez et, si nécessaire, définissez les attributs du fichier de configuration de bibliothèque avec des autorisations de lecture et d'écriture (0666).
  6. Après avoir installé la bibliothèque, utilisez le nom d'utilisateur admin et le mot de passe admin pour accéder à l'interface graphique de la bibliothèque.

Lien vers le référentiel

Merci beaucoup pour l'aide et le soutien de denaikG

Source: https://habr.com/ru/post/fr416829/


All Articles