【发布时间】: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) }} {{ form_label(child) }}</span>
{% endfor %}
</div>
{% else %}
...
如果我将“data => 2”添加到setDefaults(...),则字段女性将被选中,但我无法通过从树枝传递值来使其工作。有人可以帮帮我吗?
【问题讨论】:
-
为什么要将模板中的内容传递给对象?模板应该与控制器、模型或其他任何东西分开,我只是应该创建你已经制作的东西。
-
当表格在
twig中可用时,所有正在或将要发生的事情都应该发生。您可以在对象类$this->createFormBuilder(Object, {your options})中设置默认值,然后设置它,或者您可以在实体中对其进行硬编码。 -
嗨!感谢您的回答,当然,当我将逻辑移至控制器时,它可以完美运行。