maker-bundle icon indicating copy to clipboard operation
maker-bundle copied to clipboard

Enum type fatal error when passing the enum class in Symfony 7.2.3

Open d9beuD opened this issue 10 months ago • 4 comments

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.

d9beuD avatar Feb 14 '25 21:02 d9beuD

This is really weird, but it seems to be related to the double \ when entering the enum class. I'll take a look.

Fan2Shrek avatar Feb 18 '25 17:02 Fan2Shrek

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.

Fan2Shrek avatar Feb 18 '25 20:02 Fan2Shrek

composer/composer#12320 was closed, so I opened #1664 to fix this :)

Fan2Shrek avatar Feb 19 '25 17:02 Fan2Shrek

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.

d9beuD avatar Feb 20 '25 14:02 d9beuD