表单和 HTML
Introduction
Winter 提供各种有用的功能Html
facade,用于处理 HTML 和表单。虽然大多数示例将使用 PHP 语言,但所有这些功能都直接转换为树枝标记 通过简单的转换。
// PHP
<?= Form::open(..) ?>
// Twig
{{ form_open(...) }}
正如你在上面看到的,在 Twig 中所有函数都以form_
将直接绑定到Form
外观并提供对使用方法的访问snake_case.见标记指南以获取更多信息 在前端使用表单助手。
打开表格
表格可以用打开Form::open
将属性数组作为第一个参数传递的方法:
<?= Form::open(['url' => 'foo/bar']) ?>
//
<?= Form::close() ?>
默认情况下,一个POST
方法将被假定,但是,您可以自由指定另一种方法:
Form::open(['url' => 'foo/bar', 'method' => 'put'])
NOTE: 由于 HTML 表单只支持
POST
和GET
,PUT
和DELETE
方法将通过自动添加_method
表单的隐藏字段。
你也可以传递常规的 HTML 属性:
Form::open(['url' => 'foo/bar', 'class' => 'pretty-form'])
如果您的表单要接受文件上传,请添加files
阵列的选项:
Form::open(['url' => 'foo/bar', 'files' => true])
您还可以打开指向页面或组件中的处理程序方法的表单:
Form::open(['request' => 'onSave'])
支持 AJAX 的表单
同样,启用 AJAX 的表单可以使用Form::ajax
方法,其中第一个参数是处理程序方法名称:
Form::ajax('onSave')
第二个参数Form::ajax
应包含以下属性:
Form::ajax('onSave', ['confirm' => 'Are you sure?'])
您还可以传递部分以更新为另一个数组:
Form::ajax('onSave', ['update' => [
'control-panel' => '#controlPanel',
'layout/sidebar' => '#layoutSidebar'
]
])
NOTE: 最多来自 AJAX 框架的数据属性 可以在这里通过删除
data-request-
字首。
表单令牌
CSRF保护
如果你有启用保护, 使用Form::open
方法与POST
,PUT
或者DELETE
会自动将 CSRF 令牌作为隐藏字段添加到您的表单中。或者,如果您希望为隐藏的 CSRF 字段生成 HTML,您可以使用token
方法:
<?= Form::token() ?>
延迟绑定会话密钥
会话密钥用于延迟绑定 将作为隐藏字段添加到每个表单中。如果你想手动生成这个字段,你可以使用sessionKey
方法:
<?= Form::sessionKey() ?>
表单模型绑定
打开模型窗体
您可能希望根据模型的内容填充表单。为此,请使用Form::model
方法:
<?= Form::model($user, ['id' => 'userForm']) ?>
现在,当您生成表单元素时,例如文本输入,与字段名称匹配的模型值将自动设置为字段值。因此,例如,对于名为email
,用户模型的email
属性将被设置为值。如果会话闪存数据中有与输入名称匹配的项目,则该项目将优先于模型的值。优先级如下所示:
- 会话闪存数据(旧输入)
- 显式传递的值
- 模型属性数据
- 现有回传值
这使您可以快速构建表单,这些表单不仅可以绑定到模型值,而且可以在服务器出现验证错误时轻松重新填充。您可以使用手动访问这些值Form::value
:
<input type="text" name="name" value="<?= Form::value('name') ?>" />
您可以将默认值作为第二个参数传递:
<?= Form::value('name', 'John Travolta') ?>
NOTE: 使用时
Form::model
,一定要关闭你的形式Form::close
!
Labels
生成标签元素
<?= Form::label('email', 'E-Mail Address') ?>
指定额外的 HTML 属性
<?= Form::label('email', 'E-Mail Address', ['class' => 'awesome']) ?>
NOTE: 创建标签后,您创建的任何名称与标签名称匹配的表单元素都将自动收到与标签名称匹配的 ID。
文本域
生成文本输入
<?= Form::text('username') ?>
指定默认值
<?= Form::text('email', 'emailaddress@example.com') ?>
NOTE: 这hidden 和textarea 方法具有与text 方法。
生成密码输入
<?= Form::password('password') ?>
生成其他输入
<?= Form::email($name, $value = null, $attributes = []) ?>
<?= Form::file($name, $attributes = []) ?>
复选框和单选按钮
生成复选框或单选输入
<?= Form::checkbox('name', 'value') ?>
<?= Form::radio('name', 'value') ?>
生成选中的复选框或单选输入
<?= Form::checkbox('name', 'value', true) ?>
<?= Form::radio('name', 'value', true) ?>
Number
生成数字输入
<?= Form::number('name', 'value') ?>
文件输入
生成文件输入
<?= Form::file('image') ?>
NOTE: 表格必须是用
files
选项设置为true
.
下拉列表
生成下拉列表
<?= Form::select('size', ['L' => 'Large', 'S' => 'Small']) ?>
生成具有选定默认值的下拉列表
<?= Form::select('size', ['L' => 'Large', 'S' => 'Small'], 'S') ?>
生成分组列表
<?= Form::select('animal', [
'Cats' => ['leopard' => 'Leopard'],
'Dogs' => ['spaniel' => 'Spaniel'],
]) ?>
生成具有范围的下拉列表
<?= Form::selectRange('number', 10, 20) ?>
生成具有范围、选定值和空白选项的下拉列表
<?= Form::selectRange('number', 10, 20, 2, ['emptyOption' => 'Choose...']) ?>
生成包含月份名称的列表
<?= Form::selectMonth('month') ?>
生成包含月份名称、选定值和空白选项的列表
<?= Form::selectMonth('month', 2, ['emptyOption' => 'Choose month...']) ?>
Buttons
生成提交按钮
<?= Form::submit('Click Me!') ?>
NOTE: 需要创建一个按钮元素?试试button 方法。它具有与相同的签名submit.
自定义宏
注册表格宏
很容易定义您自己的自定义表单类助手,称为“宏”。这是它的工作原理。首先,简单地用给定的名称和闭包注册宏:
Form::macro('myField', function() {
return '<input type="awesome">';
})
现在您可以使用它的名称调用您的宏:
调用自定义表单宏
<?= Form::myField() ?>