tath/form_bundle

Tath Form Bundle for Symfony

dev-master 2017-01-01 15:22 UTC

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
  • email
  • 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' 参数,并且当它被使用时,将来自额外的哈希。