Symfony 2动态嵌入式表单,错误的(实体)类型



我有两个实体,具有对多关系。

一个"条目"有 n 个"标签"。现在我想插入一个带有标签的新条目。表单由"标签"表单的集合组成,可以通过javascript动态添加。默认情况下,在控制器代码中添加一个字段。

当表单提交并且我迭代条目的标签时,只有第一个(已添加到控制器中,而不是通过 javascript)具有正确的实体类型。其他的只是数组:

object(EntityType)[88]
   private 'id' => null
   private 'field' => null
   private 'type' => string 'S' (length=1)
array (size=3)
  'field' => null
  'type' => string 'S' (length=1)

"入口"控制器:

$entity = new Entry();
$entity->getParameters()->add(new EntryTag());
$form = $this->createForm($this->get('entryform'),$entity);
if($request->getMethod() == 'POST'){
    $form->bindRequest($request);
    $formData = $form->getData();
    foreach ($formData->getParameters() as $par) {
        var_dump($par);
    }
}

"条目"类型:$this->tagType 在构造函数中加入。

public function buildForm(FormBuilder $builder, array $options){
    $builder->add('parameters', 'collection', array(
        'type' => $this->tagType,
        'allow_add' => true,
        'allow_delete' => true,
        'by_reference' => false,
    ));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'EntityEntry',
    ));
}

"标签"类型:

public function buildForm(FormBuilder $builder, array $options){
    $builder->add('field', 'text', array('label' => 'Key'));
    $builder->add('type', 'choice', array('label' => 'Type', 'required' => false, 'choices' => $this->getTypes()));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
            'data_class' => 'Entity/Tag',
    ));
}

我用来添加字段的 JavaScript:

var $childs = $container.find('.form-child');
fieldIndindex++; 
var template = $container
            .addClass('form-child')
    .attr('data-prototype')
    .replace(/$$name$$/g, fieldIndindex);
if($childs.length == 0){
    $container.prepend($template);
}else{
    $childs.last().after($template);
}

那么,为什么没有检测到实体类型呢?

编辑:

当我将"data_class"选项添加到我的"集合"字段时,它可以工作。

$builder->add('parameters', 'collection', array(
        'type' => $this->parameterType,
        'allow_add' => true,
        'allow_delete' => true,
        'by_reference' => false,
        'options' => array(
            'data_class' => 'Entity/Tag',
        )
    ));

但是在我的"标签"类型中将其设置为默认选项应该就足够了。但是为什么不使用呢?

我明白了.....

我在2.0中使用了Symfony 2.1语法。将 setDefault 选项更改为 getDefaultOptions 后,它现在可以工作了。

相关内容

  • 没有找到相关文章

最新更新