1. Go to this page and download the library: Download acelaya/doctrine-enum-type library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
acelaya / doctrine-enum-type example snippets
declare(strict_types=1);
namespace Acelaya\Enum;
use MyCLabs\Enum\Enum;
class Action extends Enum
{
public const CREATE = 'create';
public const READ = 'read';
public const UPDATE = 'update';
public const DELETE = 'delete';
}
declare(strict_types=1);
namespace Acelaya\Enum;
use MyCLabs\Enum\Enum;
class Gender extends Enum
{
public const MALE = 'male';
public const FEMALE = 'female';
}
declare(strict_types=1);
namespace Acelaya\Entity;
use Acelaya\Enum\Action;
use Acelaya\Enum\Gender;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
* @ORM\Table(name="users")
*/
class User
{
/**
* @var int
*
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
*
* @ORM\Column()
*/
protected $name;
/**
* @var Action
*
* @ORM\Column(type=Action::class, length=10)
*/
protected $action;
/**
* @var Gender
*
* @ORM\Column(type="php_enum_gender")
*/
protected $gender;
// Getters and setters...
}
declare(strict_types=1);
// in bootstrapping code
// ...
use Acelaya\Doctrine\Type\PhpEnumType;
use Acelaya\Enum\Action;
use Acelaya\Enum\Gender;
// ...
// Register my types
PhpEnumType::registerEnumType(Action::class);
PhpEnumType::registerEnumType('php_enum_gender', Gender::class);
// Don't forget to register the enums for schema operations
$platform = $em->getConnection()->getDatabasePlatform();
$platform->registerDoctrineTypeMapping('VARCHAR', Action::class);
$platform->registerDoctrineTypeMapping('VARCHAR', 'php_enum_gender');
declare(strict_types=1);
// ...
use Acelaya\Doctrine\Type\PhpEnumType;
use Acelaya\Enum\Action;
use Acelaya\Enum\Gender;
PhpEnumType::registerEnumTypes([
Action::class,
'php_enum_gender' => Gender::class,
]);
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
{
return $platform->getVarcharTypeDeclarationSQL($fieldDeclaration);
}
declare(strict_types=1);
namespace App\Type;
use Acelaya\Doctrine\Type\PhpEnumType;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use function call_user_func;
use function implode;
use function sprintf;
class MyPhpEnumType extends PhpEnumType
{
public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform): string
{
$values = call_user_func([$this->enumClass, 'toArray']);
return sprintf(
'ENUM("%s") COMMENT "%s"',
implode('", "', $values),
$this->getName()
);
}
}
declare(strict_types=1);
// ...
use Acelaya\Enum\Action;
use Acelaya\Enum\Gender;
use App\Type\MyPhpEnumType;
MyPhpEnumType::registerEnumTypes([
Action::class,
'php_enum_gender' => Gender::class,
]);
declare(strict_types=1);
namespace Acelaya\Enum;
use MyCLabs\Enum\Enum;
class Status extends Enum
{
public const SUCCESS = 1;
public const ERROR = 2;
}
declare(strict_types=1);
namespace Acelaya\Enum;
use MyCLabs\Enum\Enum;
class Status extends Enum
{
public const SUCCESS = 1;
public const ERROR = 2;
public static function castValueIn($value): int
{
return (int) $value;
}
}
declare(strict_types=1);
namespace Acelaya\Enum;
use MyCLabs\Enum\Enum;
use function strtolower;
class Gender extends Enum
{
public const MALE = 'male';
public const FEMALE = 'female';
public static function castValueOut(self $value): string
{
return strtolower((string) $value);
}
}
// ...
public static function castValueIn($value): string
{
return \str_replace('_', '-', $value);
}
public static function castValueOut(self $value): string
{
return \str_replace('-', '_', (string) $value);
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.