表单默认值未显示

时间:2012-06-05 08:20:19

标签: forms symfony

问题是这样的。我正在尝试设置defalut表单值,我无法实现这一点。

页面布局

{% extends bundle ~ "Bundle::reg.html.twig" %}
{% form_theme regForm   'AcmeBundle:Form:order_type_fields.html.twig' %}
{% block content %}
<form action="{{ path('reg') }}" {{ form_enctype(regForm) }} method="POST">
    <div>
     {{ form_widget( regForm.firstname )}}
    </div>
    {{ form_rest( regForm )}}
    <input type="submit>
</form>
{% endblock %}

字段布局

{% block text_widget %}
{% spaceless %}
    <label>{{label}}</label>
    <input type="text" {{ block('widget_attributes') }} value="{{ value }}">
{% endspaceless %}
{% endblock text_widget %}

控制器

$user      = new User();
$regForm   = $this->get('form.factory')->create(new RegForm(), $user);

return $this->render("FrontendBundle:Order:type.html.twig", array(
       'regForm'   => $regForm->createView(),
);

表格

class RegForm extends AbstractType
{
    public function buildForm( FormBuilder $builder, array $options ){
      $builder->add( 'firstname',     'text',  array( 'label' => ' ', 'data' => 'Enter your name here' ) );
    }       

    public function getName()
    {
        return 'reg';
    }
}

我已经尝试过多种方式设置默认字段数据:

在我的控制器中定义firstname字段(

$user->setFirstname('Enter your name here');

)。

在表单构建器中使用setData方法(

$builder->add( 'firstname',     'text',  array( 'label' => ' ' ) )->setData(array('firstname' => 'Enter your name here'));

或者只是

$builder->setData(array('firstname' => 'Enter your name here'));

所有其他形式的工作都很好。例如,我可以毫无问题地设置标签'FIRSTNAME'。那么,我错过了什么?

UPD:在第一次回答后,我决定直接提出问题: 为什么不能为此工作默认值,而标签工作正常:

$builder->add('firstname', 'text', array('label' => 'name', 'data' => 'Andrew'));

也许树枝模板有些错误?

2 个答案:

答案 0 :(得分:3)

您是否在表单类型中尝试过此操作:

$builder
    ->add('firstname','hidden', array(
        'attr' => array(
            'value' => 'Enter your name here',
        ),
    ))

但在我看来,您想要使用占位符(HTML5):

$builder
    ->add('firstname','hidden', array(
        'attr' => array(
            'placeholder' => 'Enter your name here',
        ),
    ))

答案 1 :(得分:1)

在控制器中,在创建表单

之前在$ user对象上设置数据
$user      = new User();
$user->setFirstname('Default name');
$regForm   = $this->get('form.factory')->create(new RegForm(), $user);

顺便说一下,你可能想在输入上使用占位符属性:

<input placeholder="Enter your name here">

您可以通过添加&#39; attr&#39;表单构建器上的选项:

$builder->add('firstname', 'text', array(
    'attr' => array('placeholder' => 'Enter your name here'),
));