3

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

页面布局

{% 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';
    }
}

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

在我的控制器中通过定义名字字段(

$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'));

?

也许树枝模板中有一些错误?

4

2 回答 2

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',
        ),
    ))
于 2012-10-02T19:48:37.747 回答
1

在您的控制器中,在创建表单之前在 $user 对象上设置数据

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

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

<input placeholder="Enter your name here">

您可以通过在表单生成器上添加“attr”选项来做到这一点:

$builder->add('firstname', 'text', array(
    'attr' => array('placeholder' => 'Enter your name here'),
));
于 2012-06-05T17:06:29.797 回答