我有一个包含表单集合的表单(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
,根据当前轮询的可用选项(从URL中派生)设置answer
$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错误
在poll \ vote.html中呈现模板期间抛出异常(&#34; Catchable Fatal Error:类Symfony \ Component \ Form \ FormView的对象无法转换为字符串&#34;)。第9行的枝条。
我的VoteChoice
课程中有__toString函数。
答案 0 :(得分:1)
我想将voteChoice.answer作为纯文本(因此它不是下拉列表的一部分 - 我知道我可以在FormBuilder中禁用它,但我不希望它作为下拉菜单的一部分出现,我只想把它作为纯文本)
您可以通过form.vars.value
(Reference)访问表单的当前数据:
{{ voteChoice.vars.value.answer }}
这意味着voteChoice.vars.value
是PollBundle\Entity\VoteChoice
的一个实例,因此如果编辑不需要,您可以安全地从表单中删除answer
字段。