1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63:
<?php
namespace Baguette\Mastodon;
use Baguette\Mastodon\Entity\Entity;
use Symfony\Component\VarDumper\Caster\Caster;
use Symfony\Component\VarDumper\Caster\ClassStub;
use Symfony\Component\VarDumper\Cloner\Stub;
final class EntityCaster
{
private $display_types = false;
public function __construct(array $options = [])
{
if (isset($options['display_types'])) {
$this->display_types = $options['display_types'];
}
}
public function __invoke(Entity $c, array $_, Stub $stub, $isNested)
{
$a = [];
$ref = new \ReflectionClass($c);
if ($this->display_types) {
$ref_types = $ref->getProperty('property_types');
$ref_types->setAccessible(true);
$types = $ref_types->getValue();
$ref_types->setAccessible(false);
$a[Caster::PREFIX_PROTECTED.'property_types'] = $types;
}
$ref_properties = $ref->getProperty('properties');
$ref_properties->setAccessible(true);
$properties = $ref_properties->getValue($c);
$ref_properties->setAccessible(false);
foreach ($properties as $key => $prop) {
$a[Caster::PREFIX_DYNAMIC.$key] = $prop;
}
return $a;
}
}