У меня есть форма, содержащая набор форм ( 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
из своей формы, если это не требуется для редактирования.