0

我有一个带有一堆多对多复选框的表单。表单保存得很好(我检查了数据库以确保),但是复选框未数据库一致。

我需要做一些特别的事情来让复选框保持选中状态吗?

这是我的表单定义:

<?php

namespace VNN\PressboxBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class PreferencesSportsICareAboutType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {   
        $builder->add('interestingSports', 'entity', array(
            'multiple'      => true,
            'expanded'      => true,
            'property'      => 'name',
            'class'         => 'VNN\PressboxBundle\Entity\Sport',
            'query_builder' => function(\VNN\PressboxBundle\Repository\SportRepository $er) {
                return $er->createQueryBuilder('s')
                    ->orderBy('s.name', 'ASC');
            },  
        )); 
    }   

    public function getName()
    {   
        return 'vnn_pressboxbundle_preferencessportsicareabouttype';
    }   
}

这是我模板的相关部分:

{% block form %}
    <h2>Sports I Care About</h2>
    <form action="{{ path('user_update_preferences', { 'sectionName': sectionName }) }}" method="post" {{ form_enctype(form) }} novalidate class="clearfix">

        {% for error in errors %}
            error: {{ error.messageTemplate }}
        {% endfor %}

        {% for field in form.interestingSports %}
           <li>
             {{ form_widget(field) }}
             {{ form_label(field) }}
           </li>
        {% endfor %}

        {{ form_rest(form) }}

        <p><button type="submit">Submit</button></p>

    </form>
{% endblock %}
4

1 回答 1

1

看起来您的类型和模板定义明确。您应该检查您的实体关系。

我已经实现了相同的行为,但使用了一对多关系。

由 OP 编辑​​:

这是实体关系。我需要改变这个

/** 
 * @ORM\ManyToMany(targetEntity="UserSportInterest", inversedBy="sports")
 * @JoinTable(name="user_sport_interest",
 *      joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="sport_id", referencedColumnName="id")}
 *      )
 */
private $sports;

对此(注意targetEntity更改)

/** 
 * @ORM\ManyToMany(targetEntity="Sport", inversedBy="sports")
 * @JoinTable(name="user_sport_interest",
 *      joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="sport_id", referencedColumnName="id")}
 *      )
 */
private $sports;

在那之后,它工作得很好。

于 2012-11-25T15:52:31.440 回答