Cerys
6 months ago
1 changed files with 52 additions and 0 deletions
@ -0,0 +1,52 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace Darksparrow\DeegraphPHP\SchemaBuilder\Helpers; |
||||
|
|
||||
|
use Darksparrow\DeegraphPHP\SchemaBuilder\Attributes\SchemaDocument; |
||||
|
use ReflectionClass; |
||||
|
|
||||
|
class SchemaBuilder |
||||
|
{ |
||||
|
public static function GenerateSchema(object $targetSchema): array |
||||
|
{ |
||||
|
$reflection = new ReflectionClass($targetSchema); |
||||
|
$properties = $reflection->getProperties(); |
||||
|
$attributes = $reflection->getAttributes()[0]; |
||||
|
|
||||
|
$schema = []; |
||||
|
|
||||
|
/* |
||||
|
* Schema "meta-data" from here... |
||||
|
*/ |
||||
|
foreach($attributes->getArguments() as $key=>$value) |
||||
|
{ |
||||
|
if($value != "") |
||||
|
$schema["@$key"] = $value; |
||||
|
} |
||||
|
|
||||
|
/* |
||||
|
* Property handling from here... |
||||
|
*/ |
||||
|
foreach ($properties as $property) { |
||||
|
$attributes = $property->getAttributes(); |
||||
|
$propertyName = $property->getName(); |
||||
|
$propertySchema = []; |
||||
|
|
||||
|
foreach ($attributes as $attribute) |
||||
|
{ |
||||
|
if($attribute->getName() != "Darksparrow\DeegraphPHP\SchemaBuilder\Attributes\SchemaDocumentField") |
||||
|
continue; |
||||
|
|
||||
|
foreach($attribute->getArguments() as $key=>$value) |
||||
|
{ |
||||
|
if($value != "") |
||||
|
$propertySchema["@$key"] = $value; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$schema["$propertyName"] = $propertySchema; |
||||
|
} |
||||
|
|
||||
|
return $schema; |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue