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