In this example will be shown how to create a custom ENUM field for basketball positions. This ENUM should contain five values:
PG
- Point GuardSG
- Shooting GuardSF
- Small ForwardPF
- Power ForwardC
- Center
Create a class for new ENUM type BasketballPositionType
:
<?php
namespace App\DBAL\Types;
use Fresh\DoctrineEnumBundle\DBAL\Types\AbstractEnumType;
final class BasketballPositionType extends AbstractEnumType
{
public const POINT_GUARD = 'PG';
public const SHOOTING_GUARD = 'SG';
public const SMALL_FORWARD = 'SF';
public const POWER_FORWARD = 'PF';
public const CENTER = 'C';
protected static $choices = [
self::POINT_GUARD => 'Point Guard',
self::SHOOTING_GUARD => 'Shooting Guard',
self::SMALL_FORWARD => 'Small Forward',
self::POWER_FORWARD => 'Power Forward',
self::CENTER => 'Center'
];
}
Register BasketballPositionType
for Doctrine in config.yml:
doctrine:
dbal:
types:
BasketballPositionType: App\DBAL\Types\BasketballPositionType
Create a Player
entity that has a position
field:
<?php
namespace App\Entity;
use App\DBAL\Types\BasketballPositionType;
use Doctrine\ORM\Mapping as ORM;
use Fresh\DoctrineEnumBundle\Validator\Constraints as DoctrineAssert;
/**
* @ORM\Entity()
* @ORM\Table(name="players")
*/
class Player
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* Note, that type of a field should be same as you set in Doctrine config
* (in this case it is BasketballPositionType)
*
* @ORM\Column(name="position", type="BasketballPositionType", nullable=false)
* @DoctrineAssert\Enum(entity="App\DBAL\Types\BasketballPositionType")
*/
protected $position;
public function getId()
{
return $this->id;
}
public function setPosition(string $position)
{
$this->position = $position;
}
public function getPosition(): string
{
return $this->position;
}
}
Now you can set a position for Player
inside some action or somewhere else:
$player->setPosition(BasketballPositionType::POINT_GUARD);
But don't forget to define BasketballPositionType
in the use section:
use App\DBAL\Types\BasketballPositionType;