ShortId Doctrine Type
, (*1)
A Doctrine field type for
ShortId for PHP., (*2)
Installation
Run the following command:, (*3)
composer require pugx/shortid-doctrine
Note: if you use Symfony, you should require
pugx/shortid-doctrine-bundle instead., (*4)
Examples
To configure Doctrine to use shortid
as a field type, you'll need to set up
the following in your bootstrap:, (*5)
``` php
<?php, (*6)
\Doctrine\DBAL\Types\Type::addType('shortid', 'PUGX\Shortid\Doctrine\ShortidType');
$entityManager->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('shortid', 'shortid');, (*7)
Then, in your entities, you may annotate properties by setting the `@Column`
type to `shortid`.
You can generate a `PUGX\Shortid\Shortid` object for the property in your constructor, or
use the built-in generator.
Example with ShortId created manually in constructor:
``` php
<?php
use PUGX\Shortid\Shortid;
/**
* @Entity
* @Table
*/
class Product
{
/**
* @var Shortid
*
* @Id
* @Column(type="shortid")
* @GeneratedValue(strategy="NONE")
*/
private $id;
public function __construct(?Shortid $id = null)
{
$this->id = $id ?? Shortid::generate();
}
public function getId(): Shortid
{
return $this->id;
}
}
Example with auto-generated shortid:, (*8)
``` php
<?php, (*9)
use PUGX\Shortid\Shortid;, (*10)
/**
* @Entity
* @Table
*/
class Product
{
/**
* @var Shortid
*
* @Id
* @Column(type="shortid")
* @GeneratedValue(strategy="CUSTOM")
* @CustomIdGenerator(class="PUGX\Shortid\Doctrine\Generator\ShortidGenerator")
*/
private $id;, (*11)
public function getId(): Shortid
{
return $this->id;
}
}, (*12)
If you want to customize ShortId length, you can use the `length` option in the Column annotation. Example:
``` php
<?php
use PUGX\Shortid\Shortid;
/**
* @Entity
* @Table
*/
class Product
{
/**
* @var Shortid
*
* @Id
* @Column(type="shortid", length=5)
* @GeneratedValue(strategy="NONE")
*/
private $id;
public function __construct()
{
$this->id = Shortid::generate(5);
}
}
If you want to customize alphabet and/or to use the built-in generator, you need to setup ShortId in your bootstrap:, (*13)
``` php
<?php, (*14)
\Doctrine\DBAL\Types\Type::addType('shortid', 'PUGX\Shortid\Doctrine\ShortidType');
$entityManager->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('shortid', 'shortid');, (*15)
$factory = new \PUGX\Shortid\Factory();
// alphabet must be 64 characters long
$factory->setAlphabet('Ă©123456789Ă bcdefghĂŹjklmnĂČpqrstĂčvwxyzABCDEFGHIJKLMNOPQRSTUVWX.!@|');
// length must be between 2 and 20
$factory->setLength(5);
PUGX\Shortid\Shortid::setFactory($factory);
```, (*16)
Then, you must pay attention to configure every ShortId property with the same length (5
in this example)., (*17)