如何从Doctrine2实体填充zend_form


How to populate zend_form from Doctrine2 entity?

现在我正在从控制器中填充/setDefaults一个zend_form:

 $data = array('user' => $account->getUser(), 
            'password' => $account->getPassword(), 
            'name' => $account->getName());
 $form->setDefaults($data);

这是工作,但看起来非常手工的过程。有更好的方法吗?

"显而易见"的解决方案是以某种方式将扁平化实体分解为数组。这并不难做到,尽管有些极端情况可能会很难看。

我遇到过的最好看的(我还没有尝试过,但即将)罐装实现是这个(一些文档在这里)。

它使用反射来查看实体元数据,然后对返回哪种结构做出一些正确的猜测。总的来说,这似乎是最好的策略。我怀疑,要处理结构异常的实体,您可能需要调整Boris的类来检查实体上的自定义序列化方法,如果存在,则让实体自己序列化。

我采用的解决方案是将这个函数添加到实体中:

public function toArray ()
{
    return get_object_vars($this);
}

然后只是:

$form->setDefaults($test->toArray());

如果你想用另一种方式(数组到对象)你可以看看这里