A Doctrine field type for ShortId
PHP
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
tests
.gitattributes
.gitignore
.php_cs
.travis.yml
LICENSE
README.md
composer.json
phpunit.xml.dist

README.md

ShortId Doctrine Type

Total Downloads Build Status Code Climate

A Doctrine field type for ShortId for PHP.

Installation

Run the following command:

composer require pugx/shortid-doctrine

Examples

To configure Doctrine to use shortid as a field type, you'll need to set up the following in your bootstrap:

<?php

\Doctrine\DBAL\Types\Type::addType('shortid', 'PUGX\Shortid\Doctrine\ShortidType');
$entityManager->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('shortid', 'shortid');

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

use PUGX\Shortid\Shortid;

/**
 * @Entity
 * @Table
 */
class Product
{
    /**
     * @var Shortid
     *
     * @Id
     * @Column(type="shortid")
     * @GeneratedValue(strategy="NONE")
     */
    protected $id;

    public function __construct()
    {
        $this->id = Shortid::generate();
    }

    public function getId(): Shortid
    {
        return $this->id;
    }
}

Example with auto-generated shortid:

<?php

use PUGX\Shortid\Shortid;

/**
 * @Entity
 * @Table
 */
class Product
{
    /**
     * @var Shortid
     *
     * @Id
     * @Column(type="shortid")
     * @GeneratedValue(strategy="CUSTOM")
     * @CustomIdGenerator(class="PUGX\Shortid\Doctrine\Generator\ShortidGenerator")
     */
    protected $id;

    public function getId(): Shortid
    {
        return $this->id;
    }
}

If you want to customize ShortId length, you can use the length option in the Column annotation. Example:

<?php

use PUGX\Shortid\Shortid;

/**
 * @Entity
 * @Table
 */
class Product
{
    /**
     * @var Shortid
     *
     * @Id
     * @Column(type="shortid", length=5)
     * @GeneratedValue(strategy="NONE")
     */
    protected $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:

<?php

\Doctrine\DBAL\Types\Type::addType('shortid', 'PUGX\Shortid\Doctrine\ShortidType');
$entityManager->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('shortid', 'shortid');

$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);

Then, you must pay attention to configure every ShortId property with the same length (5 in this example).