问题是这样的。我正在尝试设置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'));
也许树枝模板有些错误?
答案 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'),
));