Php 更新basefieldset inputfilters与集合字段集对象冲突

Php 更新basefieldset inputfilters与集合字段集对象冲突,php,doctrine-orm,zend-framework2,zend-form,Php,Doctrine Orm,Zend Framework2,Zend Form,我的收藏有问题。我一直遵循示例教程()并成功地创建了一个Blogpost和Tag实体。在我的控制器中,我有一个添加操作和编辑操作。“我的添加和编辑视图”包含以下代码: 视图有一个用于动态添加标记的按钮(如本例中:),在编辑操作中效果良好。当同时添加带有2个标记的新Blogpost时,它只会在数据库中添加1个Tag(计数选项设置为1。当我增加这个数字时,它可以根据选项添加标记)。当我编辑Blogpost并添加2个标记(总共3个)时,2个标记被添加到数据库中 调试addTags()函数时,该参数

我的收藏有问题。我一直遵循示例教程()并成功地创建了一个
Blogpost
Tag
实体。在我的控制器中,我有一个添加操作和编辑操作。“我的添加和编辑视图”包含以下代码:


视图有一个用于动态添加标记的按钮(如本例中:),在编辑操作中效果良好。当同时添加带有2个标记的新
Blogpost
时,它只会在数据库中添加1个
Tag
(计数选项设置为1。当我增加这个数字时,它可以根据选项添加标记)。当我编辑
Blogpost
并添加2个标记(总共3个)时,2个标记被添加到数据库中

调试addTags()函数时,该参数在add操作中仅包含1个标记对象。在编辑操作中,它保存所有已添加的新标记(在我的示例中,为2个新标记)

BlogpostFieldset看起来像:

$this->添加(数组)(
'name'=>'addTag',
'类型'=>'按钮',
“选项”=>数组(
“标签”=>“添加更多标签”,
),
'属性'=>数组(
'id'=>'addTag'
)
));
$tagFieldset=新的tagFieldset($serviceManager);
$this->add(数组)(
'type'=>'Zend\Form\Element\Collection',
'name'=>'tags',
“选项”=>数组(
“计数”=>1,
'target_element'=>$tagFieldset,
“是否应创建模板”=>true,
“允许添加”=>true,
)
));
用于添加字段集的Javascript:

$('#addTag')。单击(函数(e){
var currentCount=$('form>#tagFieldset>label')。长度;
警报(当前计数);
//设置数据模板(由arraycollection生成)
变量模板=$('form>#tagFieldset>span')。数据('template');
//将模板替换为其他addressfieldset
template=template.replace(/\uuuuuuuuuuuuuuuuuuuuu索引/g,当前计数);
//设置新字段集
$('form>#tagFieldset')。追加(模板);
});
它正确地呈现了我的模板。在我的编辑操作中效果很好,但我的添加操作仅添加1个标记。通过添加inputfilters或Validator,我的控制器中存在问题。在添加新标签的情况下,我希望有一些特定的过滤器/验证器

以下代码已用于将筛选器/验证器添加到必须放置的表单/字段集:

公共函数addAction()
{
$form=新表单($this->serviceLocator);
$entity=新实体();
$form->bind($entity);
如果($this->request->isPost()){
$data=$this->request->getPost();
$form->getInputFilter()->get('fieldset')->get('input')->setRequired(true);
$form->getInputFilter()->get('fieldset')->get('input')->allowEmpty(false);
$form->setData($data);
如果($form->isValid()){
//处理其余的动作。
}
}
返回数组(
'form'=>$form
)
}
从控制器中删除以下行时-
addAction()

它能够添加比我创建的
tagFieldset
count
处设置的给定选项更多的
标记

我在
addAction()
中设置的那些InputFilter不在collection字段集中。通过添加(使用新的inputfilters)my basefieldset,collection fieldset无法添加超过给定
count
选项的标记。在这种情况下,使用Javascript函数添加更多的标记字段集是无用的,因为它们不会被添加

$form->getInputFilter()->get('fieldset')->get('input')->setRequired(true);
$form->getInputFilter()->get('fieldset')->get('input')->allowEmpty(false);