vivait / string-generator-bundle
使用属性注解生成随机字符串,用于ID或键
Requires
- php: >=7.1
- doctrine/orm: ^2.6
- ircmaxell/random-lib: ~1.0
- symfony/config: ^3.3|^4.0
- symfony/dependency-injection: ^3.3|^4.0
- symfony/options-resolver: ^3.0|^4.0
- symfony/security: ^3.3|^4.0
Requires (Dev)
- phpspec/phpspec: ~2.0
Suggests
- ramsey/uuid: To use the UUID generator you should require this package
README
此包允许您在实体属性上自动生成唯一的随机字符串,这对于创建键很有用。使用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
不可用),low
和medium
。默认
@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.generator
和alias
,该别名将用于在注解中识别生成器。
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中,使用配置定义生成器已被弃用,取而代之的是服务定义,因此必须将其删除。
-
对于您添加的任何CUSTOM生成器,您现在必须使用
vivait_generator.generator
标签和alias
属性将其定义为服务。对于内置的默认生成器,您不需要这样做。my_generator: class: App\Generator\MyGenerator tags: - { name: vivait_generator.generator, alias: 'my_generator' }
-
从您的项目中删除所有
vivait_string_generator
配置
从版本2升级到版本3
- 如果尚未删除,请从您的项目中删除所有
vivait_string_generator
配置,因为它将不再被识别。