Я бы хотел десериализовать массив в класс в Symfony, но я не могу найти способ сделать это без использования, например, json или XML.
Это класс:
class Product
{
protected $id;
protected $name;
...
public function getName(){
return $this->name;
}
...
}
Массив, который я хотел бы десериализовать в класс Product.
$product['id'] = 1;
$product['name'] = "Test";
...
Вы можете сделать это с помощью отражения, как это ..
function unserialzeArray($className, array $data)
{
$reflectionClass = new \ReflectionClass($className);
$object = $reflectionClass->newInstanceWithoutConstructor();
foreach ($data as $property => $value) {
if (!$reflectionClass->hasProperty($property)) {
throw new \Exception(sprintf(
'Class "%s" does not have property "%s"',
$className,
$property
));
}
$reflectionProperty = $reflectionClass->getProperty($property);
$reflectionProperty->setAccessible(true);
$reflectionProperty->setValue($object, $value);
}
return $object;
}
Который вы бы тогда назвали как ..
$product = unserializeArray(Product::class, array('id' => 1, 'name' => 'Test'));
Вам нужно использовать денормализатор напрямую.
Версия:
class Version
{
/**
* Version string.
*
* @var string
*/
protected $version = '0.1.0';
public function setVersion($version)
{
$this->version = $version;
return $this;
}
}
использование:
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use Version;
$serializer = new Serializer(array(new ObjectNormalizer()));
$obj2 = $serializer->denormalize(
array('version' => '3.0'),
'Version',
null
);
dump($obj2);die;
результат:
Version {#795 ▼
#version: "3.0"}