现在我正在从控制器中填充/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());
如果你想用另一种方式(数组到对象)你可以看看这里