tath / form_bundle
Tath Form Bundle for Symfony
Requires
- php: >=7.0.0
- symfony/symfony: 3.*
- tath/core: master@dev
Requires (Dev)
- phpunit/phpunit: ^5.6
This package is not auto-updated.
Last update: 2024-09-28 19:47:20 UTC
README
Tath 表单工具通过在实体上添加注解,使生成 Symfony 表单变得简单。与使用 Doctrine 注解构建数据库模式类似,你也可以构建用于创建和更新实体的表单。
有关“Tath”一词的解释,请参阅 Tath Core README.md 文件。
Tath 以及扩展的 Tath 表单工具正在积极开发中,界面不应被视为稳定。
安装
由于这是预发布软件,我尚未标记版本 ID。当 Grid 工具发布并且两者都足够稳固可以进行至少实验性使用时,我将开始使用 semver 标签。表单工具需要 tath/core 库,因此您可能需要首先安装它,或将您的最低稳定性设置为 dev。最简单的方法是使用
composer require tath/core:master@dev
composer require tath/form_bundle:master@dev
然后将其添加到您的 app/AppKernel.php 中
public function registerBundles()
{
$bundles = [
// ...
new Tath\FormBundle\TathFormBundle(),
];
// ...
}
表单包的路由需要导入到您的应用程序的路由中,您需要在 app/config/routing.yml 中添加以下内容
tath_bundle:
resource: "@TathFormBundle/Resources/config/routing.yml"
prefix: /form
当然,您可以用您喜欢的任何前缀代替/form。
您需要为您的表单创建至少一个模板。通常,您可以从一个默认模板开始,如果需要,再创建自定义版本。
假设您有一个 src/AppBundle/Resources/views/template.html.twig,它包含一个主体块,您已经在 src/AppBundle/Resources/views/form.html.twig 中创建了一个类似以下的模板
{% extends "AppBundle::template.html.twig" %}
{% block body %}
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
{% endblock %}
您需要在 app/config/config.yml 中添加以下内容,使其成为默认模板
用法
为要生成表单的实体添加 @Form 注解。为要包含在表单中的字段添加 @FormField 注解。
use Tath\FormBundle\Configuration\Form;
use Tath\FormBundle\Configuration\FormField;
/**
* @ORM\Entity
* @ORM\Table
* @Form(template="AppBundle:Foo:form.html.twig", success_redirect="foos")
*/
class Foo
{
/**
* @ORM\Column(type="string")
* @FormField(label="Foo Name")
*/
private $name;
}
将 @Form 注解添加到类中。包括可选的模板和一个成功重定向,即提交表单后返回的路线。您可以可选地包括包含表单的模板。如果您在实体上未使用模板属性,Tath 将在您的 config.yml 中查找默认模板
tath_form:
template: "AppBundle::form.html.twig"
如果两者都没有提供,Tath 将提供自己的表单模板,该模板包括表单和提供您自己的说明。
表单字段用 @FormField 注解标记。它可以包含许多属性,所有这些都是可选的
label
显示在输入元素旁边的标题。
type
输入类型。这些与内置在 Symfony 表单中的类型匹配,Tath 尽可能地将 Doctrine 类型匹配到这些类型。您可以手动设置类型为以下之一
- birthday
- checkbox
- choice
- country
- currency
- date
- datetime
- entity
- file
- integer
- language
- locale
- money
- number
- radio
- range
- text
- textarea
- time
- timezone
- url
choices
为 choice 类型提供的选项列表。例如
/**
* @ORM\Column(type="string")
* @FormField(choices={"foo":"Foo", "bar":"Bar", "baz":"Baz"})
*/
private $choice;
restrict
基于 Symfony 角色,限制字段的可见性或编辑。例如
/**
* @ORM\Column(type="string")
* @FormField(restrict={
* @RoleRestriction(visible={"ROLE_FOO"}, edit={"ROLE_BAR", "ROLE_BAZ"})
* })
*/
private $text;
min / max
限制整数或范围的最小值和/或最大值。
currency
用于货币类型,表示输入的预期货币。请参阅https://symfony.com.cn/doc/current/reference/forms/types/money.html#currency。
Twig 函数
这些函数都包含一个可选的 'extra' 参数,可以用于将额外的键/值对传递给表单,具体请参阅下一节。
可以使用这些 twig 函数生成 Tath 表单的路由
tath_new(class_name, extra)
要链接到创建新实体的表单,请使用 tath_new 函数调用您要添加的实体的名称。例如
<a href="{{ tath_new('AppBundle:Foo') }}">New</a>
tath_edit(entity, extra)
要链接到编辑现有实体的表单,请使用 tath_edit 函数调用您希望编辑的实体。例如
<a href="{{ tath_edit(foo) }}">Edit</a>
额外数据/关系
有时表单需要传递额外的数据。例如,假设您有一个包含艺术家和专辑的数据库。可以从艺术家页面管理专辑。当添加专辑时,您希望包括艺术家的 ID,并且在创建新专辑时,您希望调用专辑的艺术家设置器。
您的专辑实体将具有如下 @ManyToOne 关系
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Artist")
*/
private $artist;
使用额外参数生成的指向新专辑表单的链接如下
<a href="{{ tath_new('AppBundle:Album', {'artist':artist.id}) }}">New Album</a>
额外哈希中的键(artist)与 ManyToOne 列的名称匹配,因此 Tath 能够在提交添加表单时创建此关系。编辑表单不会改变关系,因此不需要额外的参数,因为该列将保持不变。
额外的参数还会传递回成功重定向。因此,显示艺术家的控制器可以接受 'artist' 参数,并且当它被使用时,将来自额外的哈希。