我是Symfony2的新手,我现在正在尝试构建一个表单。我有一个类Message,表单中的数据应该创建一个Message对象。
我的问题是不需要字段,虽然我在调用createFormBuilder时在控制器中明确指定了它。
然而,触发了HTML5电子邮件验证程序。
第二个问题是占位符属性不起作用。它只是没有添加到字段中,虽然我已在视图中设置它。
控制器操作:
class ContactController extends Controller {
public function indexAction(Request $request) {
$message = new Message();
$form = $this->createFormBuilder($message)
->add('Name', 'text', array('required' => true))
->add('Email', 'email')
->add('Subject', 'text')
->add('Body', 'textarea')
->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
// data is an array with "name", "email", and "message" keys
$data = $form->getData();
}
return $this->render('PhotographPhotoBundle:Contact:index.html.twig', array('form' => $form->createView()));
}
}
消息类:
class Message
{
protected $name;
protected $subject;
protected $body;
protected $email;
+ setters and getters here
}
表单模板
{# src/Photograph/PhotoBundle/Resources/views/Form/fields.html.twig #}
{% block field_row %}
{% spaceless %}
{{ form_errors(form) }}
{{ form_widget(form) }}
{% endspaceless %}
{% endblock field_row %}
{% block email_widget %}
<input type="email" {{ block('attributes') }} value="{{ value }}" class="field-email form_field">
{% endblock %}
{% block text_widget %}
<input type="text" {{ block('attributes') }} value="{{ value }}" class="field-name form_field">
{% endblock %}
{% block textarea_widget %}
<textarea name="field-message" {{ block('attributes') }} cols="45" rows="5" class="field-message form_field">{{ value }}</textarea>
{% endblock %}
表单视图
<form action="{{ path('PhotographPhotoBundle_contact') }}" method="post" class="feedback_form" >
{{ form_errors(form) }}
{{ form_widget(form.Name) }}
<div class="clear"></div>
{{ form_widget(form.Email, { 'attr': {'placeholder': 'email' }}) }}
<div class="clear"></div>
{{ form_widget(form.Subject, { 'attr': {'placeholder': 'sujet' }}) }}
<div class="clear"></div>
{{ form_widget(form.Body, { 'attr': {'placeholder': 'message' }}) }}
<div class="clear"></div>
<input value="envoyer votre message" type="submit" class="feedback_go" />
<div class="ajaxanswer"></div>
{{ form_end(form) }}
答案 0 :(得分:1)
将所有非必填列的required
属性设为false,并添加attr
属性以添加占位符
$form = $this->createFormBuilder($message)
->add('Name', 'text', array('required' => false))
->add('Email', 'email', array('required' => false, 'attr' => array('placeholder' => 'some text here')))
->add('Subject', 'text')
->add('Body', 'textarea')
->getForm();
答案 1 :(得分:1)
表格主题模板中有错误。该块名为widget_attributes
{% block text_widget %}
<input type="text" {{ block('widget_attributes') }} value="{{ value }}" class="field-name form_field">
{% endblock %}