adamthehutt / laravel-lean-forms
Laravel的基于代码的表单配置。轻量级、简洁、高效的blade模板。业务逻辑和UI/显示逻辑完全分离。
Requires
- php: >=7.4
- ext-json: *
- illuminate/database: ^5.8 | ^6.0 | ^7.0 | ^8.0
- illuminate/support: ^5.8 | ^6.0 | ^7.0 | ^8.0
Requires (Dev)
- orchestra/testbench: ^4.0
- phpunit/phpunit: ^8.2
This package is auto-updated.
Last update: 2022-01-10 20:30:50 UTC
README
安装
composer require adamthehutt/laravel-lean-forms
如果您想更改默认皮肤或自定义模板
php artisan vendor:publish
基本用法
此包提供了一种表达式的语法来定义表单和字段,同时允许您将所有领域逻辑保持在Blade模板之外。
例如
use AdamTheHutt\LeanForms\AbstractForm; use AdamTheHutt\LeanForms\Elements\Select; use AdamTheHutt\LeanForms\Elements\Text; use AdamTheHutt\LeanForms\Elements\Textarea; class AnimalCreate extends AbstractForm { public $fields = [ 'name' => Text::class, 'description' => Textarea:class ]; /** * This field is a bit more complex so we'll define it explicitly rather * than simply in $this->fields. */ public function preferredDiet() { return $this->element(Select::class) ->multiple() ->options(['Plants', 'Bugs', 'Humans']); } }
然后在您的模板中,您只需要关注客户端或显示逻辑
{{ $form->open() }} {{ $form->name() ->attr("v-model", "animalName") }} {{ $form->description() ->data("toggle", "tooltip") ->title("Description goes here, dummy") }} {{ $form->preferredDiet()->class("foo-bar") }}
注意:请确保编译您的JavaScript资源!
表单生成器
此包包含一个Artisan命令用于生成新的表单类
php artisan make:lean-form "App\Http\Forms\Animal\Create"
当然,您可以在您喜欢的命名空间和位置存储表单类。
表单配置
通常,此包会尝试基于命名约定进行一些合理的猜测,但您始终可以选择明确指定。以下是一些您应该了解的表单类属性和方法
$method属性 — 可以设置为任何标准REST HTTP动词。如果没有明确设置,则包将尝试根据表单类名称进行猜测。例如,如果类名称为(或以“Create”结尾),则使用POST;对于“Edit”,使用PUT;对于“Destroy”,使用DELETE。
$route属性或方法 — 属性可以设置为已定义的路由的字符串名称。更复杂的路由可以实现route()方法并返回,例如,route("animal.update", [$animal->id])。如果既没有定义属性也没有定义方法,则包将尝试根据表单类名称和模型名称进行猜测。例如,如果表单类的基名为AnimalEdit,相关的模型为Animal,则将猜测route("animal.update", [$animal])。
$files属性 — 如果您需要表单接受文件上传,请将$files属性设置为true。
字段 — 您的表单类逻辑可能主要涉及配置字段。您有两种方法可以这样做。
- 使用简单的字段名称到所需Element类名称的映射定义$fields属性,例如:$fields["foo" => Text::class]。这在最基本和常规场景中工作。在上面的例子中,它将导致具有id和name "foo"的文本字段,并应用所有默认逻辑。
- 为特定表单字段定义一个方法。这允许通过流畅的界面进行广泛的定制。(在Blade模板中引用字段时也可以使用这些方法。)以下是一些可用的选项
- name($value) — 设置表单字段的名称(默认为定义方法的snake_case名称)
- id($value) — 设置id属性(默认为名称)
- label($value) — 设置标签文本(默认为用户友好的名称版本)
- class($value) — 覆盖元素的模板默认值
- labelClass() — 覆盖标签的模板默认值
- options($map) — 用于选择、单选框等的键值数组或选项集合
- value($value) — 设置字段的值(覆盖模型属性)
- default($value) — 如果为空,则设置默认值
- data($key, $value) — 在元素上设置数据-xyz属性
- attr($key, $value) — 设置任意的HTML属性
- readonly(), multiple(), placeholder($value),等等 — 设置相应的HTML属性
支持的字段类型
以下字段类型目前受到支持
- 按钮
- 复选框
- 布尔复选框
- 货币
- 日期选择器 & 日期时间选择器: https://github.com/flatpickr/flatpickr
- 电子邮件
- 文件
- 隐藏
- 月份
- 数字
- 密码
- 单选按钮
- 选择
- 提交
- 文本
- 多行文本框
Blade模板
在Blade模板中生成表单HTML就像调用相关方法一样简单。您还可以使用方法链来附加显示或客户端逻辑,例如:
- $form->open()
- $form->name()->labelClass("sr-only")
- $form->description()->attr("v-model", "animalDescription")
- $form->submit("保存动物")
- $form->close()
表单皮肤
该包支持根据不同的约定或标准“皮肤化”表单。默认皮肤是Bootstrap 3,同时支持Bootstrap 4。(欢迎为支持其他皮肤的模板创建拉取请求!)您可以通过在.env文件中设置LEAN_FORMS_SKIN值来为表单配置默认皮肤。您也可以通过更改$skin属性为单个表单设置。
表单字段包装
默认皮肤自动将每个表单字段包装在div.form-group元素中,并生成相应的标签元素。您可以通过调用以下内容来关闭此行为:
{{ $form->open()->nowrap() }}
为了进行更细致的控制,您还可以在特定元素上调用$element->nowrap()
,或者甚至在字段上指定$includeLabel
和/或$includeFormGroup
属性。
确定字段值
当表单加载时,字段值通常根据以下(按降序)优先级确定
- 已提交的表单输入,即
old($name)
- 显式分配的值,即
$form->animal()->value("giraffe")
- 字段名称的模型属性,即
$form->model->animal
- 显式分配的默认值,即
$form->animal()->default("giraffe")
注意:还有一个特殊的"__value"属性,它用于内部,但除非您正在扩展表单元素类或修改模板,否则您不需要担心它。
查找表单类
您始终可以直接使用,例如,new MyForm($model)
来实例化表单类。
您还可以使用库的服务容器绑定来定位类。例如,如果您有一个名为App\Http\Forms\Animal\Create
的表单类,您可以使用以下内容创建一个新的实例:
$form = app("forms")->form("animal.create", $model);
这段文字稍微有点冗长,但当与在 lean-forms.php 配置文件中配置命名空间的能力结合使用时,可能会很有用。通过在配置文件中定义命名空间数组,您可以设置一个优先查找表单类的命名空间列表。这允许包开发者包括默认表单类,这些表单类可以通过优先考虑 App 命名空间轻松被覆盖。
LeanFormsManager 类也可以被调用,因此上面的内容可以稍微缩短为
$form = app("forms")("animal.create", $model);