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

Type と Template が適切に定義されているようです。エンティティ関係を確認する必要があります。

私はすでに同じ動作を実装していますが、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 に答える