Ответ 1
Выяснил это. Учитывая репозиторий:
//for odm
$repo->getDocumentManager()->getHydratorFactory()->hydrate($entity, $array);
Я не знаю, может ли это быть сделано для ORM, но в настоящее время я использую ODM.
Я думаю, что название спрашивает все это. Очень просто, у меня есть сущность:
class User {
private $id;
private $name;
private $username;
}
со всеми соответствующими сеттерами и геттером. У меня есть массив:
array( 'name' => 'joe', 'username' => 'shmoe' );
и я хочу сделать что-то вроде этого:
Some\Unknown\Doctrine\Object::hydrateFromArray($array);
Очевидно, что создание функции для гидратации объекта будет достаточно простым, но, несомненно, у доктрины должно быть что-то для этого, чтобы выполнить это?
Выяснил это. Учитывая репозиторий:
//for odm
$repo->getDocumentManager()->getHydratorFactory()->hydrate($entity, $array);
Я не знаю, может ли это быть сделано для ORM, но в настоящее время я использую ODM.
Как и Entities, вам нужно создать сеттеры и геттеры.
class User
{
private $id;
private $name;
private $username;
public function fromArray($array)
{
// Code to fill the object here.
}
}
Также нет ничего, что говорит о том, что вы также не можете реализовать его в конструкторе. Помните, что объекты Doctrine 2 не наследуют ничего из основного класса, если вы не сделаете это самостоятельно. Он просто действует на него.
Вы можете использовать компонент Serializer:
$user = $serializer->deserialize($data, 'Namespace\User', 'json');
http://symfony.com/doc/current/components/serializer.html#deserializing-an-object
Вы можете использовать ObjectNormalizer :: denormalize - https://symfony.com/doc/current/components/serializer.html