Это не столько проблема, сколько то, что я заметил и хотел бы лучше понять.
У меня есть класс Poll котором есть коллекция votes и pollOptions . Мой класс PollOption имеет poll к PollOption он принадлежит, и title . Класс Vote также имеет poll к voteChoices он принадлежит, а также собственную коллекцию voteChoices и user . У класса VoteChoice есть vote оно принадлежит, answer ( PollOption ), за который идет голосование, и priority .
У меня есть форма, содержащая набор форм ( Vote со многими VoteChoice )
VoteChoiceType выглядит следующим образом
class VoteChoiceType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('answer', null, array('disabled' => true)) ->add('priority', null); } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'PollBundle\Entity\VoteChoice', )); } }
Теперь в моем VoteController я создаю и заполняю Vote многими voteChoices , устанавливая answer соответствии с доступными вариантами текущего опроса (полученного из URL-адреса)
$vote = new Vote(); $vote->setPoll($poll); foreach ($vote->getPoll()->getPollOptions() as $op) { $vc = New VoteChoice(); $vote->addVoteChoice($vc->setAnswer($op)); }-$vote = new Vote(); $vote->setPoll($poll); foreach ($vote->getPoll()->getPollOptions() as $op) { $vc = New VoteChoice(); $vote->addVoteChoice($vc->setAnswer($op)); }
Итак, моя ветка выглядит следующим образом
<ul class="voteChoices" data-prototype="{{form_widget(form.voteChoices.vars.prototype)|e('html_attr') }}"> {% for voteChoice in form.voteChoices %} <li>{{ voteChoice.vars.value.answer }} {{ form_row(voteChoice.priority) }}</li> {% endfor %} </ul> </div> <p><button type="submit" class="btn btn-success">Go!</button></p> {{ form_end(form) }}
Однако, если я VotechoiceType answer в свой VotechoiceType а в моей VotechoiceType включаю {{ form_row(voteChoice.answer) }} я замечаю, что все мои параметры опроса из таблицы, как и в выбираемом списке, даже если они отделены от другого опроса.
Почему это? Как я могу заставить его просто отображать варианты, доступные в опросе, к которому принадлежит голосование? Мое подозрение в том, что я не правильно обрабатывал отношения между VoteChoice и PollOption (многие к одному). Если я допустил ошибку здесь, я, скорее всего, сделал это в другом месте (например, Poll возможно, получает каждое Vote в db, а не те, которые принадлежат ему)