添加collectionType

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

标签: php symfony

我有两个实体,Registro和RegistroProfesional。 一个Registro有许多RegistroProfesional。 (一对多)。

在表单中,我希望第一个RegistroProfesional出现,但它给出了错误“必须管理传递给选择字段的实体。可能它们仍存在于实体管理器中?”

这是我在formtype中的字段:

$builder->add('registroProfesionales','collection', array(
    'type'=> new RegistroProfesionalType(),
    'cascade_validation' => true,
    'allow_delete'   => true,
    'allow_add'      => true,
    'prototype' => true,
    'prototype_name' => '__registro_profesionales__',
    'label' => false
))

在我的控制器中:

$entity = new Registro();
$registroProfesional = new RegistroProfesional();
$entity->addRegistroProfesionale($registroProfesional); // Here add the first RegistroProfesional
$flow = $this->get('biobanco.form.flow.crearRegistro');
$flow->bind($entity);
$form = $flow->createForm();
if ($flow->isValid($form)) {
    $flow->saveCurrentStepData($form);

    if ($flow->nextStep()) {
        // form for the next step
        $form = $flow->createForm();
    } else {
        //dump($form,$entity);die();
        // flow finished
        $em = $this->getDoctrine()->getManager();
        $em->persist($entity);
        $em->flush();
        $flow->reset(); // remove step data from the session
        $this->enviarCorreo($entity->getId(), 'REGISTRO');
        return $this->render('BiobancoBundle:Registro:realizado.publico.html.twig');
    }
}

查看:

{% for rp in form.registroProfesionales %}
    <div class="col-sm-6 col-xs-12">
        <label>Nombre</label>
        {{ form_widget(rp.nombre) }}
        {% if form_errors(rp.nombre) is not empty %}
            <div class="alert alert-danger alert_form alert-dismissible fade in" role="alert">
                {{ form_errors(rp.nombre) }}
            </div>
        {% endif %}
    </div>
    <div class="col-sm-6 col-xs-12">
        <label>Primer Apellido</label>
        {{ form_widget(rp.apellido1) }}
        {% if form_errors(rp.apellido1) is not empty %}
            <div class="alert alert-danger alert_form alert-dismissible fade in" role="alert">
                {{ form_errors(rp.apellido1) }}
            </div>
        {% endif %}
    </div>
    <div class="col-sm-6 col-xs-12">
        <label>Segundo Apellido</label>
        {{ form_widget(rp.apellido2) }}
        {% if form_errors(rp.apellido2) is not empty %}
            <div class="alert alert-danger alert_form alert-dismissible fade in" role="alert">
                {{ form_errors(rp.apellido2) }}
            </div>
        {% endif %}
    </div>
    <div class="col-sm-6 col-xs-12">
        <label>Email</label>
        {{ form_widget(rp.email) }}
        {% if form_errors(rp.email) is not empty %}
            <div class="alert alert-danger alert_form alert-dismissible fade in" role="alert">
                {{ form_errors(rp.email) }}
            </div>
        {% endif %}
    </div>
{% endfor %}

问题出在哪里?

1 个答案:

答案 0 :(得分:1)

问题很可能不在您列出的代码中。

我会说你在A$form = $flow->createForm();本身就有了一些东西。显然,你已经找到了某种选择字段(可能是RegistroProfesionalType,即通常的学说关系),并且在这个字段属性上映射的值还有一个尚未保留的值。