我认为标题要求一切。很简单,我有一个实体:
class User {
private $id;
private $name;
private $username;
}
使用所有适当的setter和getter。我有一个数组:
array( 'name' => 'joe', 'username' => 'shmoe' );
我希望能够做到这样的事情:
Some\Unknown\Doctrine\Object::hydrateFromArray($array);
显然创造一个能够将物体水合成一个物体的功能就足够了,但是,学说必须要有一些东西才能实现这个目标吗?
答案 0 :(得分:20)
想出来。 给定一个存储库:
//for odm
$repo->getDocumentManager()->getHydratorFactory()->hydrate($entity, $array);
我不知道是否可以为ORM做同样的事情,但我目前正在使用ODM。
答案 1 :(得分:4)
与实体一样,由你来创建setter和getter。
class User
{
private $id;
private $name;
private $username;
public function fromArray($array)
{
// Code to fill the object here.
}
}
此外,没有任何内容表明您无法在构造函数中实现它。请记住,除非您自己执行,否则Doctrine 2实体不会从主类继承任何内容。它只是对它起作用。
答案 2 :(得分:4)
您可以使用序列化程序组件:
$user = $serializer->deserialize($data, 'Namespace\User', 'json');
http://symfony.com/doc/current/components/serializer.html#deserializing-an-object