如何去控制表单渲染
到目前为止,我们已经看了一个完整的表单是如何通过一行代码被渲染的。当然,你通常需要更加灵活的渲染方式:
1 2 3 4 5 6 7 |
{# app/Resources/views/default/new.HTML.twig #}
{{ form_start(form) }}
{{ form_errors(form) }}
{{ form_row(form.task) }}
{{ form_row(form.dueDate) }}
{{ form_end(form) }} |
1 2 3 4 5 6 7 |
<!-- app/Resources/views/default/newAction.html.php -->
<?php echo $view['form']->start($form) ?>
<?php echo $view['form']->errors($form) ?>
<?php echo $view['form']->row($form['task']) ?>
<?php echo $view['form']->row($form['dueDate']) ?>
<?php echo $view['form']->end($form) ?> |
你已经知道form_start()
和form_end()
函数,但是其他功能是做什么的呢?
form_errors(form)
渲染任何整个表单的错误信息(特定字段的错误,会显示在每个字段的下面一行)。
form_row(form.dueDate)
默认情况下,为给定的字段(如,dueDate
)在一个div
中渲染一个文本标签,错误信息,和HTML表单部件。
大部分工作是由form_row
帮助方法类完成的,它默认在一个div
中为每个字段渲染显示标签,错误信息和HTML表单部件。在表单主题部分,你将学会如果在form_row定制不同风格。
注意,你可以通过form.vars.value
来访问你的当前数据:
1 |
{{ form.vars.value.task }} |
1 |
<?php echo $form->vars['value']->getTask() ?> |
手动配置每一个字段 ¶
form_row
帮助器是伟大的,能让你很快的渲染你表单中的每一个字段(并且每一行可以被自定义化)。但是生活不总是那么简单的,你也可能要手动的渲染每一个字段。下面的代码呈现的样子和你使用form_row
呈现的样子是一样的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
{{ form_start(form) }}
{{ form_errors(form) }}
<div>
{{ form_label(form.task) }}
{{ form_errors(form.task) }}
{{ form_widget(form.task) }}
</div>
<div>
{{ form_label(form.dueDate) }}
{{ form_errors(form.dueDate) }}
{{ form_widget(form.dueDate) }}
</div>
<div>
{{ form_widget(form.save) }}
</div>
{{ form_end(form) }} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php echo $view['form']->start($form) ?>
<?php echo $view['form']->errors($form) ?>
<div>
<?php echo $view['form']->label($form['task']) ?>
<?php echo $view['form']->errors($form['task']) ?>
<?php echo $view['form']->widget($form['task']) ?>
</div>
<div>
<?php echo $view['form']->label($form['dueDate']) ?>
<?php echo $view['form']->errors($form['dueDate']) ?>
<?php echo $view['form']->widget($form['dueDate']) ?>
</div>
<div>
<?php echo $view['form']->widget($form['save']) ?>
</div>
<?php echo $view['form']->end($form) ?> |
如果自动生成的label不是你想要的,你可以指定它:
1 |
{{ form_label(form.task, 'Task Description') }} |
1 |
<?php echo $view['form']->label($form['task'], 'Task Description') ?> |
一些字段类型有一些额外的渲染选项可以传入widget,一个常用的选项为attr
,它允许你修改表单元素的属性。下面的示例将添加task_field
类到渲染的文本输入字段:
1 |
{{ form_widget(form.task, {'attr': {'class': 'task_field'}}) }} |
1 2 3 |
<?php echo $view['form']->widget($form['task'], array(
'attr' => array('class' => 'task_field'),
)) ?> |
如果你想手工渲染表单字段,你可以单独访问每个字段的值,比如id
,name
和label
,这里我们获取id
:
1 |
{{ form.task.vars.id }} |
1 |
<?php echo $form['task']->vars['id']?> |
需要获取表单字段名称属性你需要使用full_name
值:
1 |
{{ form.task.vars.full_name }} |
1 |
<?php echo $form['task']->vars['full_name'] ?> |
Twig模版函数查考 ¶
如果你使用twig,表单渲染功能完整文档在reference。读这篇文章可以了解可用的助手和可以使用的选项。