Symfony2 Doctrine2 - 如何将实体(未获取的表单数据库)转换为数组

时间:2012-06-01 11:40:10

标签: symfony doctrine-orm

我有来自表单框架的实体。

    public function editAction($id)
    {
        $request = $this->getRequest();
        $r = $this->getProfileRepository();
        $profile = $id ? $r->find($id) : 
            new \Alden\BonBundle\Entity\Profile();
        /* @var $profile \Alden\BonBundle\Entity\Profile */
        $form = $this->createForm(
            new \Alden\BonBundle\Form\Type\ProfileType(), 
            $profile);
        if ($request->getMethod() == 'POST')
        {
            $form->bindRequest($request);
            if ($form->isValid())
            {
            ...

我需要将$profile转换为数组。在课程Profile中,所有属性都被定义为私有,因此我无法像foreach($profile as $key => $value) {...}

那样进行迭代

1 个答案:

答案 0 :(得分:3)

您可以使用Reflection来检索类属性。然后,使用PropertyPath检索属性值。

这是一个例子:

$reflectedClass = new \ReflectionClass($yourClass);
$objectProperties = $reflectedClass->getProperties();
$datas = array();
foreach ($objectProperties as $objectProperty) {
    $property = $objectProperty->getName();

    $path = new PropertyPath($property);
    $datas[] = $path->getValue($object);
}

但是,如果你的表单/实体很简单,你可以在实体中创建一个专用方法来返回正确的数组。