idci/simple-metadata-bundle

Symfony SimpleMetadataBundle

v2.0.0 2019-10-10 08:29 UTC

README

Symfony2 简单元数据包

安装

要安装此包,请按照以下步骤操作

首先在您的 composer.json 文件中添加依赖

"require": {
        ...,
        "idci/simple-metadata-bundle": "dev-master"
    },

然后使用以下命令安装包

php composer update

在您的应用程序内核中启用包

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        ...
        new IDCI\Bundle\SimpleMetadataBundle\IDCISimpleMetadataBundle(),
    );
}

现在将包配置导入到您的 app/config/config.yml

imports:
    ...
    - { resource: @IDCISimpleMetadataBundle/Resources/config/config.yml }

现在包已安装并配置完毕。

如何使用

与元数据的一对一关系

在实体中

/**
 * @var Metadata
 *
 * @ORM\OneToOne(targetEntity="IDCI\Bundle\SimpleMetadataBundle\Entity\Metadata", cascade={"all"})
 * @ORM\JoinColumn(name="metadata_id", referencedColumnName="id", onDelete="SET NULL", nullable=true)
 */
private $metadata;

在此实体表单类型中

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ...
        ->add('metadata', 'related_to_one_metadata', array(
            'data' => $builder->getData()->getMetadata()
        ))
        ...
    ;
}

与元数据的多对多关系

在实体中

/**
 * @var array<Metadata>
 *
 * @ORM\ManyToMany(targetEntity="IDCI\Bundle\SimpleMetadataBundle\Entity\Metadata", cascade={"all"})
 * @ORM\JoinTable(name="my_entity_metadata",
 *     joinColumns={@ORM\JoinColumn(name="my_entity_id", referencedColumnName="id", onDelete="cascade")},
 *     inverseJoinColumns={@ORM\JoinColumn(name="metadata_id", referencedColumnName="id", unique=true, onDelete="cascade")}
 * )
 */
private $metadatas;

在此实体表单类型中

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ...
        ->add('metadatas', 'related_to_many_metadata')
        ...
    ;
}

无元数据实体关系

在实体中

/**
 * @var string
 *
 * @ORM\Column(name="metadata", type="textarea")
 */
private $metadata;

在此实体表单类型中

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ...
        ->add('metadata', 'metadata')
        ...
    ;
}

高级表单使用

metadata 表单类型接受一个 fields 选项,例如

    $builder
        ...
        ->add('metadata', 'metadata', array(
            'fields' => array(
                'firstName' => array('text'),
                'lastName' => array('text'),
                'address' => array('text'),
                'city' => array('text'),
                'country' => array('text'),
                'message' => array('textarea')
            )
        ))
        ...
    ;

此包提供了一个 json 表单类型,这对于存储JSON非常有用(必须用于文本映射字段)。

自定义命名空间

您可以在不填写表单的情况下创建自己的命名空间。

首先声明它们如下

idci_simple_metadata:
    namespaces: [tags, features]

如果您查看 container:debug,您将看到现在有新的表单类型可用

$ php app/console container:debug
...
form.type.form.type.related_to_one_metadata_features               container IDCI\Bundle\SimpleMetadataBundle\Form\Type\RelatedToOneMetadataType
form.type.form.type.related_to_one_metadata_tags                   container IDCI\Bundle\SimpleMetadataBundle\Form\Type\RelatedToOneMetadataType
form.type.related_to_many_metadata_features                        container IDCI\Bundle\SimpleMetadataBundle\Form\Type\RelatedToManyMetadataType
form.type.related_to_many_metadata_tags                            container IDCI\Bundle\SimpleMetadataBundle\Form\Type\RelatedToManyMetadataType
...

只需在表单构建器中使用它们即可

    $builder
        ...
        ->add('features', 'related_to_many_metadata_features')
        ->add('tags', 'related_to_many_metadata_tags')
        ...
    ;