2

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

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

代码:

似乎问题归结为 InputFilter,但我似乎无法确定到底出了什么问题。删除集合的 N 个条目中的 (N-1) 个可以正常工作,因此 InputFilter 结构本身没有问题。也许当 POSTed 集合为空时,Zend\Form不会删除分配给teams集合每个元素的现有 NotEmpty 验证器?

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

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

4

2 回答 2

1

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

if ( !isset($data['union']['teams']) || empty($data['union']['teams']) ) {
    $entity->removeTeams($entity->getTeams());
}
于 2014-06-24T02:51:28.873 回答
0

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

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

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

于 2014-04-16T23:29:43.620 回答