我正在开发一个 Zend Framework 2 项目,其中用户必须能够添加/编辑发票。发票由一些客户信息(例如姓名、地址)和一个或多个发票行组成。为此,我使用两个 Doctrine 2 实体:Invoice
和 InvoiceLine
。发票包含一个 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/