如何从Doctrine2实体填充zend_form?

时间:2011-09-09 20:19:47

标签: php zend-framework doctrine doctrine-orm

现在我正在从控制器中填充/ setDefaults这样的zend_form:

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

 $form->setDefaults($data);

它正在工作但接缝非常手动的过程。有没有更好的方法呢?

2 个答案:

答案 0 :(得分:4)

“明显的”解决方案是以某种方式将实体扁平化为数组。这不是很难做到,虽然一些角落案件可能会变得丑陋。

最好看的(我还没有尝试过,但即将到来)我遇到的罐头实施是this one(有些docs are here)。

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

答案 1 :(得分:4)

我申请的解决方案是将此功能添加到实体:

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

然后只是:

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

另外如果您需要以反方式(数组到对象)的方式执行此操作,您可以查看here