删除Zend \ Form \ Collection的所有元素(带有DoctrineModule ObjectSelect的Fieldset)

时间:2014-04-16 22:23:19

标签: php doctrine-orm zend-framework2 zend-form2

我正在使用ZF2应用程序,该应用程序使用ZF2表单和DoctrineModule水化器在简单的CRUD系统中创建/更新实体。实体(Union)与另一个权利(团队)具有Doctrine OneToMany关联,并且该关联在表单站点上由Zend\Form\Element\Collection表示。在创建新实体或使用表单更新现有实体时,一切正常,除了一种情况:清空预先存在的实体的关联集合。当我删除集合的所有元素并单击“保存”时,表单将被退回,集合中的每个现有元素都会显示错误Value is required and can't be empty

视频显示问题:http://youtu.be/3ucRb6X61c8

代码:

似乎问题归结为InputFilter,但我似乎无法确定错误的原因。删除集合中N个条目的最多(N-1)个工作正常,因此它对InputFilter结构本身不是问题。也许当POSTed集合为空时,Zend\Form不会删除分配给teams集合的每个元素的现有NotEmpty验证器?

为Union字段集提供了自定义输入过滤器(see here),但teams集合元素没有列出输入。我还尝试完全删除自定义InputFilter并为teams集合添加合适的InputFilter定义,但最终结果是相同的。

那里的任何人都对我在这里做错了什么有任何见解?

2 个答案:

答案 0 :(得分:1)

为了解决这个问题,我更新了接收表单POST的控制器,以检测何时从客户端清空集合并手动清空实体上的集合:

if ( !isset($data['union']['teams']) || empty($data['union']['teams']) ) {
    $entity->removeTeams($entity->getTeams());
}

答案 1 :(得分:0)

尝试使用TeamFieldset工具Zend\InputFilter\InputFilterProviderInterface,然后将以下方法添加到字段集中:

public function getInputFilterSpecification()
{
    return array(
        'id' => array(
            'required' => false,
        )
    );
}

已修改TeamFieldsethttps://gist.github.com/anonymous/08bf222baa5c250b4614