【问题标题】:How to populate zend_form from Doctrine2 entity?如何从 Doctrine2 实体填充 zend_form?
【发布时间】:2011-09-09 20:19:47
【问题描述】:

现在我正在从控制器中填充/设置一个这样的 zend_form:

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

 $form->setDefaults($data);

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

【问题讨论】:

  • 它有点手动,但它至少在表单中的字段名称和实体中的成员名称之间提供了一些解耦。我通常将其推送到一个名为 setDefaultsFromModel() 之类的表单方法中,或者只是覆盖 setDefaults() 以接受模型和数组。

标签: php zend-framework doctrine doctrine-orm


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我应用的解决方案是将此函数添加到实体:

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

    然后就是:

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

    另外,如果您需要以其他方式(数组到对象)进行操作,您可以查看here

    【讨论】:

    • 如果实体具有与列不直接相关的关联或属性,则此解决方案不好。
    猜你喜欢
    • 1970-01-01
    • 2013-09-02
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多