Enum type fatal error when passing the enum class in Symfony 7.2.3
I created a new Symfony 7.2.3 project in a dockerized environment and created a Task entity using make:entity command. I just added a title property.
Then I created a TaskStatus enum like so:
# src/Entity/Enum/TaskStatus.php
<?php
namespace App\Entity\Enum;
enum TaskStatus: int
{
case Pending = 0;
case Done = 1;
}
Then, using make:entity again, I edit my Task entity and fill the form:
Class name of the entity to create or update (e.g. FierceKangaroo):
> task
Your entity already exists! So let's add some new fields!
New property name (press <return> to stop adding fields):
> status
Field type (enter ? to see all types) [string]:
> enum
Enum class:
> App\\Entity\\Enum\\TaskStatus
When I press enter, a fatal error is thrown:
Fatal error: Cannot declare enum App\Entity\Enum\TaskStatus, because the name is already in use in /var/www/src/Entity/Enum/TaskStatus.php on line 5
21:26:22 CRITICAL [php] Fatal Compile Error: Cannot declare enum App\Entity\Enum\TaskStatus, because the name is already in use ["exception" => Symfony\Component\ErrorHandler\Error\FatalError^ { …}]
At this point, what I understand is that the enum cannot exists before I try to add it to my entity. But if I delete it and try again, it now says:
[ERROR] Class "App\\Entity\\Enum\\TaskStatus" doesn't exist; please enter an existing full class name.
By the way, I use a php:8.3.17-apache docker image. How am I supposed to use the enum type in my entities? I found nothing in Symfony's docs.
This is really weird, but it seems to be related to the double \ when entering the enum class. I'll take a look.
This seems to be related to a composer bug when loading classes with multiple backslashes. I propose a fix to Composer, but I'm not sure if we need to fix this here as well.
composer/composer#12320 was closed, so I opened #1664 to fix this :)
Thank you for your amazing work @Fan2Shrek.
I instinctively used \\ because it is often needed when working with strings, I didn't know that a single \ wouldn't be interpreted as a way to escape the next character in the make:entity command.
A sub-section in Creating an Entity Class documentation dedicated to enum usage may be a good idea I think. Because when you google for site:symfony.com enum there are results only from blog posts announcing backed enums support and EnumType Field. What do you think ? I can write it myself and make a PR.