表单和HTML

介绍

October提供各种有用的函数与Htmlfacade,用于处理HTML和表单。 虽然大多数示例都将使用PHP语言,但所有这些功能都可以通过简单的转换直接转换为Twig标记

  1. // PHP
  2. <?= Form::open(..) ?>
  3. // Twig
  4. {{ form_open(...) }}

如上所示,在Twig中,所有以form_为前缀的函数将直接绑定到Formfacade,并使用snake_case下划线格式提供对方法的访问。 有关使用前端中的表单帮助程序的信息,请参阅标记指南以获取更多信息

打开表单

可以使用Form::open方法打开表单,该方法将一组属性作为第一个参数传递:

  1. <?= Form::open(['url' => 'foo/bar']) ?>
  2. //
  3. <?= Form::close() ?>

默认情况下,将假定使用POST方法,但是,您可以自由指定另一种方法:

  1. Form::open(['url' => 'foo/bar', 'method' => 'put'])

注意: 由于HTML表单只支持POSTGET,因此PUTDELETE方法将通过自动在表单中添加_method隐藏字段。

您也可以传递常规HTML属性:

  1. Form::open(['url' => 'foo/bar', 'class' => 'pretty-form'])

如果您的表单要接受文件上传,请在您的数组中添加files选项:

  1. Form::open(['url' => 'foo/bar', 'files' => true])

您还可以打开指向页面或组件中的处理程序方法的表单:

  1. Form::open(['request' => 'onSave'])

支持AJAX的表单

同样,可以使用Form::ajax方法打开支持AJAX的表单,其中第一个参数是处理程序方法名称:

  1. Form::ajax('onSave')

Form::ajax的第二个参数应该包含以下属性:

  1. Form::ajax('onSave', ['confirm' => 'Are you sure?'])

您还可以将partials作为另一个数组传递给更新:

  1. Form::ajax('onSave', ['update' => [
  2. 'control-panel' => '#controlPanel',
  3. 'layout/sidebar' => '#layoutSidebar'
  4. ]
  5. ])

注意: 通过删除data-request -前缀,大多数来自AJAX框架的数据属性可用。

表单令牌

CSRF保护

如果你保护已启用,使用带有POSTPUTDELETEForm::open方法将自动为表单添加一个CSRF令牌 作为一个隐藏的领域。 或者,如果您希望为隐藏的CSRF字段生成HTML,则可以使用token方法:

  1. <?= Form::token() ?>

延迟绑定会话密钥

用于延迟绑定 的会话密钥将作为隐藏字段添加到每个表单。 如果要手动生成此字段,可以使用sessionKey方法:

  1. <?= Form::sessionKey() ?>

表单模型绑定

打开模型表单

您可能希望根据模型的内容填充表单。 为此,请使用Form::model方法:

  1. <?= Form::model($user, ['id' => 'userForm']) ?>

现在,当您生成表单元素(如文本输入)时,与字段名称匹配的模型值将自动设置为字段值。 例如,对于名为email的文本输入,用户模型的email属性将被设置为值。 如果会话闪存数据中的项目与输入名称匹配,则该项目将优先于模型的值。 优先级如下:

  1. 会话闪存数据(旧输入)
  2. 明确地传递价值
  3. 模型属性数据
  4. 现有的回发价值

这使您可以快速构建不仅绑定到模型值的表单,而且如果服务器上存在验证错误,则可以轻松地重新填充。 您可以使用Form::value手动访问这些值:

  1. <input type="text" name="name" value="<?= Form::value('name') ?>" />

您可以传递默认值作为第二个参数:

  1. <?= Form::value('name', 'John Travolta') ?>

注意: 使用Form::model时,请务必使用Form::close关闭表单!

Labels标签

生成标签元素

  1. <?= Form::label('email', 'E-Mail Address') ?>

指定额外的HTML属性

  1. <?= Form::label('email', 'E-Mail Address', ['class' => 'awesome']) ?>

注意: 创建标签后,使用与标签名称匹配的名称创建的任何表单元素都将自动接收与标签名称匹配的ID。

文本字段

生成文本输入

  1. <?= Form::text('username') ?>

指定默认值

  1. <?= Form::text('email', 'emailaddress@example.com') ?>

注意: hiddentextarea方法与 text 方法具有相同的签名。

生成密码输入

  1. <?= Form::password('password') ?>

生成其他输入

  1. <?= Form::email($name, $value = null, $attributes = []) ?>
  2. <?= Form::file($name, $attributes = []) ?>

复选框和单选按钮

生成复选框和单选按钮

  1. <?= Form::checkbox('name', 'value') ?>
  2. <?= Form::radio('name', 'value') ?>

生成已选中的复选框或单选按钮

  1. <?= Form::checkbox('name', 'value', true) ?>
  2. <?= Form::radio('name', 'value', true) ?>

数字

生成数字输入

  1. <?= Form::number('name', 'value') ?>

文件选择

生成一个文件选择框

  1. <?= Form::file('image') ?>

注意: 必须打开表单,并将files选项设置为true

下拉列表

生成一个下拉列表

  1. <?= Form::select('size', ['L' => 'Large', 'S' => 'Small']) ?>

生成具有所选默认值的下拉列表

  1. <?= Form::select('size', ['L' => 'Large', 'S' => 'Small'], 'S') ?>

生成分组列表

  1. <?= Form::select('animal', [
  2. 'Cats' => ['leopard' => 'Leopard'],
  3. 'Dogs' => ['spaniel' => 'Spaniel'],
  4. ]) ?>

生成带范围的下拉列表

  1. <?= Form::selectRange('number', 10, 20) ?>

生成包含范围,选定值和空白选项的下拉列表

  1. <?= Form::selectRange('number', 10, 20, 2, ['emptyOption' => 'Choose...']) ?>

生成包含月份名称的列表

  1. <?= Form::selectMonth('month') ?>

生成包含月份名称,选定值和空白选项的列表

  1. <?= Form::selectMonth('month', 2, ['emptyOption' => 'Choose month...']) ?>

按钮

生成提交按钮

  1. <?= Form::submit('Click Me!') ?>

注意: 需要创建一个按钮元素? 尝试按钮方法。 它与submit具有相同的签名。

自定义宏

注册表单宏

很容易定义自己的自定义Form类助手,称为“宏”。 这是它的工作原理。 首先,只需使用给定名称和Closure注册宏:

  1. Form::macro('myField', function() {
  2. return '<input type="awesome">';
  3. })

现在您可以使用其名称调用您的宏:

调用自定义表单宏

  1. <?= Form::myField() ?>