如何用PHP 8.1、Symfony 6与Doctrine创建枚举类型?
在Symfony 6中创建枚举类型
Symfony 6没有内置的控制台命令可以直接生成枚举类,你需要手动创建符合PHP枚举规范的类。
以下是包含3个选项的枚举示例,以内容状态枚举为例:
// src/Enum/StatusEnum.php namespace App\Enum; enum StatusEnum: string { case Draft = 'draft'; case Published = 'published'; case Archived = 'archived'; // 可选:添加返回友好名称的方法 public function label(): string { return match($this) { self::Draft => '草稿', self::Published => '已发布', self::Archived => '已归档', }; } }
如果要在Symfony实体中关联这个枚举,示例代码如下:
// src/Entity/Post.php namespace App\Entity; use App\Enum\StatusEnum; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] class Post { // ... 其他字段定义 #[ORM\Column(type: 'string', enumType: StatusEnum::class)] private StatusEnum $status; public function getStatus(): StatusEnum { return $this->status; } public function setStatus(StatusEnum $status): self { $this->status = $status; return $this; } }
在表单里使用该枚举的示例:
// src/Form/PostType.php namespace App\Form; use App\Entity\Post; use App\Enum\StatusEnum; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\EnumType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; class PostType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder // ... 其他表单字段 ->add('status', EnumType::class, [ 'class' => StatusEnum::class, 'choice_label' => fn($enum) => $enum->label(), ]); } public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ 'data_class' => Post::class, ]); } }
内容的提问来源于stack exchange,提问作者RookieCoder
相关产品推荐
相关产品推荐

