【问题标题】:Symfony 2 +Twig custom form field type - Selected Radio ButtonSymfony 2 +Twig 自定义表单字段类型 - 选定的单选按钮
【发布时间】:2014-01-05 23:32:26
【问题描述】:

我想从树枝的单选按钮上的会话中自动选择值。不幸的是,下面的代码对我不起作用。

在我的树枝模板中

{{ form_row(reg_form.sex, {'data' : 2}) }}

我的表单字段类型(User::SEX_MALE = 1,User::SEX_FEMALE = 2)

<?php

namespace FWM\CoreBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

use FWM\CoreBundle\Entity\User;

use Symfony\Component\OptionsResolver\Options;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

/**
 * A form field for selecting user's sex
 */
class SexType extends AbstractType
{
    /**
     * {@inheritDoc}
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults([
            'choices' => array(
                User::SEX_MALE => 'label.form.male',
                User::SEX_FEMALE => 'label.form.female'
            ),
            'label' => 'label.form.sex',
            'expanded' => true,
        ]);
    }    

    /**
     * {@inheritDoc}
     */
    public function getParent()
    {
        return 'choice';
    }

    /**
     * {@inheritDoc}
     */
    public function getName()
    {
        return 'user_sex';
    }
}

还有我的显示自定义:

{% block form_row %}
    {% set error = false %}
    {% if errors %}
        {% set error = true %}
        {% set attr = attr|merge({'class' : attr.class|default('') ~ ' error'}) %}
    {% endif %}
    {{ form_widget(form, {'attr' : attr, 'error': error}) }}
{% endblock form_row %}


{% block choice_widget %}
{% spaceless %}
    {% if expanded %}
        {% set attr = attr|merge({'class' : attr.class|default('') ~ ' radio-row'}) %}

        <div {{ block('widget_container_attributes') }}>

        {{dump(form)}}

        {% for child in form %}

            <span class="unbreakable">{{ form_widget(child) }}&nbsp;{{ form_label(child) }}</span>

        {% endfor %}
        </div>
    {% else %}
...

如果我将“data => 2”添加到setDefaults(...),则字段女性将被选中,但我无法通过从树枝传递值来使其工作。有人可以帮帮我吗?

【问题讨论】:

  • 为什么要将模板中的内容传递给对象?模板应该与控制器、模型或其他任何东西分开,我只是应该创建你已经制作的东西。
  • 当表格在twig 中可用时,所有正在或将要发生的事情都应该发生。您可以在对象类 $this-&gt;createFormBuilder(Object, {your options}) 中设置默认值,然后设置它,或者您可以在实体中对其进行硬编码。
  • 嗨!感谢您的回答,当然,当我将逻辑移至控制器时,它可以完美运行。

标签: symfony twig


【解决方案1】:

@qooplmao 在评论中写道:

当表格在twig 中可用时,所有正在或将要发生的事情都应该发生。您可以在对象类$this-&gt;createFormBuilder(Object, {your options}) 中设置默认值,然后设置它,或者您可以在实体中对其进行硬编码。

猜你喜欢
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
相关资源
最近更新 更多