У меня есть форма, содержащая набор форм ( 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', )); } }
Теперь в моем контроллере я создаю и заполняю много 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)); }
Поэтому, когда форма загружается, я хочу, чтобы все параметры отображались только – не для фактического выбора, а затем пользователь может установить приоритет, который они хотят. Тем не менее, ответ на каждый ответ, который у меня есть в моей таблице poll_options (у каждого Poll много PollOption , похожее на то, как у каждого Vote много VoteChoice )
Текущий шаблон ветви
<ul class="voteChoices" data-prototype="{{ form_widget(form.voteChoices.vars.prototype)|e('html_attr') }}"> {% for voteChoice in form.voteChoices %} <li>{{ form_row(voteChoice.answer) }} {{ form_row(voteChoice.priority) }}</li> {% endfor %} </ul> </div> <p><button type="submit" class="btn btn-success">Go!</button></p> {{ form_end(form) }}
Я хочу, чтобы voteChoice.answer был как обычный текст (поэтому он не является частью раскрывающегося списка – я знаю, что могу отключить его в FormBuilder, но я не хочу, чтобы он отображался как часть раскрывающегося меню, я просто хочу это как обычный текст)
Если я использую voteChoice.answer, я получаю следующую ошибку symfony
Во время рендеринга шаблона было выбрано исключение («Catchable Fatal Error: Object класса Symfony \ Component \ Form \ FormView не удалось преобразовать в строку») в poll \ vote.html.twig в строке 9.
У меня есть функция __toString в классе VoteChoice .
Я хочу, чтобы voteChoice.answer был как обычный текст (поэтому он не является частью раскрывающегося списка – я знаю, что могу отключить его в FormBuilder, но я не хочу, чтобы он отображался как часть раскрывающегося меню, я просто хочу это как обычный текст)
Вы можете получить доступ к текущим данным формы через form.vars.value ( Reference ):
{{ voteChoice.vars.value.answer }}
Это означает, что voteChoice.vars.value является экземпляром PollBundle\Entity\VoteChoice чтобы вы могли безопасно удалить поле answer из своей формы, если это не требуется для редактирования.