vivait/string-generator-bundle

使用属性注解生成随机字符串,用于ID或键

4.0.1 2019-10-14 09:05 UTC

This package is auto-updated.

Last update: 2024-09-14 19:58:26 UTC


README

Build Status

此包允许您在实体属性上自动生成唯一的随机字符串,这对于创建键很有用。使用Doctrine的prePersist回调,StringGenerator在实体持久化之前将生成的字符串添加到属性中。它还会检查该字符串是否对该属性唯一(以防万一),如果不是,则静默地生成一个新的字符串。

安装

运行:composer require vivait/string-generator-bundle:^3.0来安装包。

如果您使用的是PHP 5.3或5.4,可以使用旧版本vivait/string-generator-bundle:^1.1

检查最新版本

更新您的AppKernel

public function registerBundles()
{
    $bundles = array(
        ...
        new Vivait\StringGeneratorBundle\VivaitStringGeneratorBundle(),
}

捆绑生成器

StringGenerator

根据字符池生成随机字符串。默认

@Generate(generator="string", options={"length"=8, "chars"="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", "prefix"=""})

SecureStringGenerator

使用ircmaxell的RandomLib生成安全的随机字符串。该库提供三种不同强度的字符串(当前high不可用),lowmedium。默认

@Generate(generator="secure_string", options={"length"=32, "chars"="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", "strength"="medium"})

SecureBytesGenerator

使用Symfony\Component\Security\Core\Util\SecureRandom类生成安全的随机字节字符串。默认

@Generate(generator="secure_bytes", options={"length"=8})

UuidStringGenerator

要使用此生成器,您应该在您的应用程序中要求包ramsey/uuid

用于生成UUID

@Generate(generator="uuid_string", options={"version"=4})

您还可以使用命名空间版本(v3和v5)。例如,对于v5

@Generate(generator="uuid_string", options={"version"=5}, namespace="my_namespace")

用法

@Generate(generator="generator_name")注解添加到实体属性中(其中generator_name是配置中定义的生成器的名称)。

generator是注解的必需属性。

use Vivait\StringGeneratorBundle\Annotation\GeneratorAnnotation as Generate;

/**
 * Api
 *
 * @ORM\Table()
 * @ORM\Entity()
 */
class Api
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="guid")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="UUID")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="api_id", type="string", nullable=false)
     * @Generate(generator="string")
     */
    private $api_key;

选项

实现ConfigurableGeneratorInterface的生成器(如捆绑生成器)具有可配置的选项。

为此,在注解上设置选项参数

@Generate(generator="string", options={"length"=32, "chars"="ABCDEFG"})

回调

可以在您使用的Generator类上定义回调。例如,对于捆绑的StringGenerator,您可能希望设置生成的字符串的前缀

这可以通过设置callbacks选项来实现。例如

@Generate(generator="my_generator", callbacks={"setPrefix"="VIVA_"})

在这里,setChars()StringGenerator类中被调用,传递参数ABCDEFG

甚至可以动态设置回调值

/**
 * @var string
 *
 * @ORM\Column(name="short_id", type="string", length=255, nullable=false)
 * @Generate(generator="string", options={"length"=32}, callbacks={"setPrefix"="getPrefix"})
 */
private $short_id;

public function getPrefix()
{
    return $this->getType(); //"default"
}

在这种情况下,StringGenerator::setPrefix("default")将被调用

唯一

设置unique是布尔值,告诉字符串是否必须唯一,默认为true

@Generate(generator="secure_bytes", unique=false)

覆盖

默认情况下,override设置为true,因此总是为属性生成字符串。但是,通过将override设置为false,只有null属性才会为它们生成字符串。

@Generate(generator="string", override=false)

自定义生成器

您可以使用自己的生成器,通过实现GeneratorInterface并在您的services.yml文件中定义生成器,使用标签vivait_generator.generatoralias,该别名将用于在注解中识别生成器。

vivait_generator.generator.secure_bytes:
    class: Vivait\StringGeneratorBundle\Generator\SecureBytesGenerator
    tags:
        - { name: vivait_generator.generator, alias: 'secure_bytes' }

要创建可配置的生成器,实现ConfigurableGeneratorInterface。此接口使用Symfony\Component\OptionsResolver\OptionsResolver来设置生成器配置。

设置默认选项

/**
 * @param OptionsResolver $resolver
 */
public function getDefaultOptions(OptionsResolver $resolver)
{
  $resolver->setDefaults(
      [
        'chars'  => $this->chars,
        'length' => $this->length,
        'prefix' => $this->prefix,
      ]
  );
}

使用选项做某事

/**
 * @param array $options
 */
public function setOptions(array $options)
{
    $this->chars  = $options['chars'];
    $this->length = $options['length'];
    $this->prefix = $options['prefix'];
}

从版本1升级到版本2

在版本2中,使用配置定义生成器已被弃用,取而代之的是服务定义,因此必须将其删除。

  1. 对于您添加的任何CUSTOM生成器,您现在必须使用vivait_generator.generator标签和alias属性将其定义为服务。对于内置的默认生成器,您不需要这样做。

    my_generator:
        class: App\Generator\MyGenerator
        tags:
            - { name: vivait_generator.generator, alias: 'my_generator' }
  2. 从您的项目中删除所有vivait_string_generator配置

从版本2升级到版本3

  1. 如果尚未删除,请从您的项目中删除所有vivait_string_generator配置,因为它将不再被识别。