webfox/laravel-forms

一个 Laravel 表单包

v1.7.7 2023-05-30 02:30 UTC

This package is auto-updated.

Last update: 2024-08-30 01:11:42 UTC


README

默认情况下,视图是为 beagle JavaScript 设置的,不包括在内

指令

表单打开

@form(['update' => route('some-model.store', [$model]), 'model' => $model, 'files' => true, 'extra' => [...]])
@form(['store' => route('some-model.store'), 'files' => true, 'extra' => [...]])
@form(['delete' => route('some-model.delete'), 'files' => true, 'extra' => [...]])
@form(['get' => route('search.route'), 'extra' => [...]])

注释

  • 使用以下任何一种方法将自动追加 csrf _token 和正确的 route type _method 字段。
  • 如果通过 'model' 键传递了一个模型,我们将使用它的数据来填充表单字段的值。
  • 通过 'extra' 数组传递的任何内容都将作为属性追加到表单中。

表单关闭

@endform

注释

  • 表单实际上是一个组件,这意味着你需要在使用完毕后关闭它。
  • 这将解除对 'model' 的绑定,因此同一页上的未来表单不会受到影响。

表单字段

现在我们进入有趣的部分。表单字段的最小要求是一个名称

@formField(['name' => 'first_name'])

这将渲染一个 type="text" 表单字段,被一个带有 First Name 标签的表单组包裹,并具有适当的值,此外这将处理显示服务器端验证错误。

@formField(['name' => 'name', 'label' => 'Your Name'])

这将渲染如上,但标签将是 Your Name

@formField(['name' => 'name', 'label' => false])

这将渲染如上,但没有任何标签

@formField(['name' => 'work_email', 'type' => 'email' ])

这将渲染一个 type="email" 表单字段,遵循之前的规则

@formField(['name' => 'role', 'options' => ['k' => 'v', 'k2' => 'v2']])

这将渲染一个带有给定选项的 select。如果没有找到此字段的值,我们还将预先添加一个空的 <option> 标签

@formField(['name' => 'roles', 'options' => ['k' => 'v', 'k2' => 'v2'], 'extra' => ['multiple']])

这将渲染一个带有给定选项的 select,此外,选择框的名称将是 roles[]

@formField(['name' => 'first_name', 'extra' => ['required', 'data-boolean', 'data-something' => 'value']])

这将渲染一个具有以下附加属性的字段 required data-boolean data-something="value"

计算值

以下优先级顺序用于计算表单的值:0.通过 Laravel 的 old($fieldName) 助手匹配的输入。0.传递给 @form 的模型的属性。0.直接传递的值,例如 @formField(['name' => 'name', 'value' => 'John'])

此外,如果最终计算出的值是一个对象并且具有 getValue 方法,则将调用该方法。

关于 old 输入和多个表单的注释...

不幸的是,没有方法可以限制 Laravel 的 old($fieldName) 助手的作用域,这意味着如果页面上的一个表单有旧输入,页面上具有相同名称的所有字段都将被填充旧输入。这不是本包的限制,而是 Laravel 旧输入处理的一个限制。

关于模板、向后兼容性和支持的注释

我们已经开源了这个包,所以你也可以使用它,但这个包主要是为我们自己的内部使用设计的,这意味着一些模板有特定的规则,需要从我们的模板中运行 JavaScript,此外,我们将经常发布以添加我们需要的新的功能和修复,但这可能会破坏你的工作。

与其直接使用这个包,我们建议你将其分叉并维护一个组织内部的副本。

IDE 助手

如果你还没有添加,请将以下内容添加到你的项目的 .idea/blade.xml 文件中,以便 PHPstorm 了解指令

<data directive="@endform" />
<data directive="@form" injection="true" prefix="&lt;?php function x(array $options) {}; x(" suffix="); ?&gt;" />
<data directive="@formField" injection="true" prefix="&lt;?php function x(array $options) {}; x(" suffix="); ?&gt;" />