我正在使用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定义,但最终结果是相同的。
那里的任何人都对我在这里做错了什么有任何见解?
答案 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,
)
);
}
已修改TeamFieldset
:https://gist.github.com/anonymous/08bf222baa5c250b4614