Symfony - 表单项为纯文本

时间:2016-10-24 20:52:09

标签: php symfony doctrine twig

我有一个包含表单集合的表单(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函数。

1 个答案:

答案 0 :(得分:1)

  

我想将voteChoice.answer作为纯文本(因此它不是下拉列表的一部分 - 我知道我可以在FormBuilder中禁用它,但我不希望它作为下拉菜单的一部分出现,我只想把它作为纯文本)

您可以通过form.vars.valueReference)访问表单的当前数据:

{{ voteChoice.vars.value.answer }}

这意味着voteChoice.vars.valuePollBundle\Entity\VoteChoice的一个实例,因此如果编辑不需要,您可以安全地从表单中删除answer字段。