Remplissez le vieil objet PHP avec du contenu JSON.
Vous pouvez installer cette bibliothèque avec Composer :
composer require abgeo/json-to-popo
Incluez le chargeur automatique du compositeur dans votre fichier principal (Ex. : index.php)
require __DIR__.'/../vendor/autoload.php';
Considérez que vous avez example.json
avec le contenu suivant :
{
"firstName" : " Temuri " ,
"lastName" : " Takalandze " ,
"active" : true ,
"position" : {
"title" : " Developer " ,
"department" : {
"title" : " IT "
}
}
}
et plusieurs classes POPO pour représenter ces données JSON :
Department.php
<?php
class Department
{
/**
* @var string
*/
private $ title ;
// Getters and Setters here...
}
Position.php
<?php
class Position
{
/**
* @var string
*/
private $ title ;
/**
* @var ABGEOPOPOExampleDepartment
*/
private $ department ;
// Getters and Setters here...
}
Person.php
<?php
class Person
{
/**
* @var string
*/
private $ firstName ;
/**
* @var string
*/
private $ lastName ;
/**
* @var bool
*/
private $ active ;
/**
* @var ABGEOPOPOExamplePosition
*/
private $ position ;
// Getters and Setters here...
}
Remarque : toutes les propriétés POPO doivent avoir une annotation @var
complète avec le type de données correct.
Vous voulez maintenant convertir ce json to popo avec des relations. Ce package vous offre cette capacité.
Créons un nouvel objet ABGEOPOPOComposer
et lisons le contenu example.json
:
$ composer = new Composer ();
$ jsonContent = file_get_contents ( __DIR__ . ' /example.json ' );
C'est l'heure de la magie ! Appelez composeObject()
avec le contenu de JSON et la classe principale, et cela vous donnera POPO :
$ resultObject = $ composer -> composeObject ( $ jsonContent , Person::class);
Imprimer $resultObject
:
var_dump ( $ resultObject );
//class ABGEOPOPOExamplePerson#2 (4) {
// private $firstName =>
// string(6) "Temuri"
// private $lastName =>
// string(10) "Takalandze"
// private $active =>
// bool(true)
// private $position =>
// class ABGEOPOPOExamplePosition#4 (2) {
// private $title =>
// string(9) "Developer"
// private $department =>
// class ABGEOPOPOExampleDepartment#7 (1) {
// private $title =>
// string(2) "IT"
// }
// }
//}
Voir l’exemple complet ici.
Veuillez consulter CHANGELOG pour plus de détails.
Les demandes de tirage sont les bienvenues. Pour les changements majeurs, veuillez d'abord ouvrir un ticket pour discuter de ce que vous souhaitez changer.
Veuillez vous assurer de mettre à jour les tests le cas échéant.
Copyright © 2020 Temuri Takalandze.
Publié sous licence MIT.