添加集合表单上的symfony3错误索引

时间:2017-11-01 10:39:04

标签: javascript forms symfony-3.3

我在FOSUser中添加了一些自定义字段。 我向用户添加了一个名为客户的实体,其中包含 Phonenumbers 地址的集合。

我有javascript代码,允许添加Phonenumber和Address字段。添加的新索引是错误的,并且遵循我的集合的字段数。

我的电话号码有2个字段,所以新索引从2开始。我的地址集合中有7个字段,新索引从7开始。

最后,我的新馆藏不在请求中。为什么我的索引遵循我的集合表单中的字段数?

这里是我的formTypes:

Match

CustomerType:

class ProfileType extends AbstractType
{

public function buildForm(FormBuilderInterface $builder, array $options)
{

    $builder->add('customer', CustomerType::class,array(
        'label'=>'sitebundle.customer',
        'by_reference'=>false,

    ));
    $builder->remove('plainPassword');

}

public function getParent()
{
    return 'FOS\UserBundle\Form\Type\RegistrationFormType';
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\User'
    ));
}

}

PhonenumberType和AddressType:

class CustomerType extends AbstractType
{

 public function buildForm(FormBuilderInterface $builder, array                         $options)
{

    $builder

        ->add('lastName',null,array(
            'required' => true,
            'label'=>'sitebundle.lastname'
        ))
        ->add('firstName',null,array(
            'label'=>'sitebundle.firstname',
            'required' => true
        ))

        ->add('companyName',null,array(
            'required' => false,
            'label'=>'sitebundle.companyname'

        ))

        ->add('phonenumbers', CollectionType::class, array(
            'label'=>'sitebundle.phonenumbers',
            'mapped'=>true,
            'allow_add'=>true,
            'required' => true,
            'allow_delete' => true,
            'delete_empty' => true,
            'by_reference' => false,
            'entry_type'   => PhoneNumberType::class
        ))


        ->add('addresses', CollectionType::class, array(
            'label'=>'sitebundle.addresses',
            'mapped'=>true,
            'allow_add'=>true,
            'required' => true,
            'allow_delete' => true,
            'delete_empty' => true,
            'by_reference' => false,
            'entry_type'   => AddressType::class
        ))
    ;
}

/**
 * @param OptionsResolver $resolver
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
       # 'validation_groups' => array('registration'),
        'data_class' => 'LilWorks\StoreBundle\Entity\Customer'
    ));
}


}

1 个答案:

答案 0 :(得分:0)

您可能正在使用此doc。我遇到了和你一样的问题。我的解决方案是以其他方式计算指数。

在我的javascript函数中,我有一个"索引" var控制原型的数量,然后我将该var传递给所有原型,以便下次在add或del上重新计算。看看......

$addTelefono.on('click', function (e) {
                e.preventDefault();
                var prototype = $('#render-telefonos').attr('data-prototype');
                var index = parseInt($render_tel.attr('index'));
                var newForm = prototype.replace(/__name__/g, index).replace(/label__/g, '');

                $render_tel.attr('index', index + 1);

                $toRenderTel.append('<div class="row"></div>');
                $toRenderTel.append($('<h3 class="form-section">Nuevo teléfono <button class="btn red btn-xs delete-tel" type="button">Eliminar</button></h3>'))
                $toRenderTel.append(newForm);
                SGIPI.manageFormControl();
            });

在此之前,您需要将索引attr分配给集合渲染,如下所示:

$render_dir.attr('index', $render_dir.find(':input').length);

您可以使用自己的逻辑,例如稍后将特定的attr放入find()。

希望它有所帮助...