forms - 表单集合上的 ZF2 对象绑定(bind)

标签 forms collections doctrine-orm zend-framework2

我正在开发一个 Zend Framework 2 项目,其中用户必须能够添加/编辑发票。发票由一些客户信息(例如姓名、地址)和一个或多个发票行组成。为此,我使用两个 Doctrine 2 实体:InvoiceInvoiceLine。发票包含一个 Doctrine ArrayCollection 及其所有行。

我还有一个发票表单和行字段集。此表单包含所有行的表单集合:

$form->add(array(
    'type' => 'Zend\Form\Element\Collection',
     'name' => 'lines',
     'options' => array(
        'should_create_template' => true
     )
));
$form->get('lines')->setTargetElement($this->createLineFieldset($form->get('lines')-  >getTemplatePlaceholder()));

发布表单后,我将发票实体绑定(bind)到表单并验证表单。对于新的(不存在的)发票,这非常完美,我的发票包含所有信息,包括行:

$form->bind($invoice);
$form->setData($request->getPost());

if ($form->isValid()) {
    // Form is valid and invoice contains all information (including lines)
}

如果我想编辑现有发票,事情就会开始出错。当我用现有的发票(和行)填充表格时,一切似乎都很好;所有字段和字段集都填充有值。但是,当我发布此表单时,所有字段集(现有的或新行)都未经过验证,并且我的实体不包含正确的值;所有行都丢失了。

简而言之:添加工作正常,但编辑发票却不行。

我错过了什么还是这是一个错误?提前致谢!

最佳答案

经过长时间的调试,我终于解决了这个问题:)。起初我使用的是 Zend 的 ObjectProperty Hydrator。将其更改为 Doctrine 的 DoctrineObject 水合器解决了我的问题。我为所有属性创建了 getter 和 setter,并将所有 Hydrators 更改为 DoctrineObject,现在一切正常。

关于forms - 表单集合上的 ZF2 对象绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17277055/

相关文章:

forms - 提交表单-由于过程漫长而卡住

javascript - 使用 JavaScript 实时生成结果

c# - ArrayList 究竟存储什么?

c# - 将 gridview 与我的 getall 方法绑定(bind) - Entity Framework

php - 交响乐 2 : Disable Doctrine event listener in ContainerAwareCommand

javascript - cforms js datepicker插入年份两次

javascript - 使用 jQuery 和 Ajax 发送输入数组

java - 在 Java 中创建对象集合的一般推荐方法是什么?

php - Symfony2 - Doctrine2 : Cross-Database Join Column throws Mapping-Exception

php - Doctrine 2 和带有额外字段的多对多链接表