palabs/enum-bundle

php 8.1 枚举的 Symfony 扩展包

安装数: 1,599

依赖关系: 0

建议者: 0

安全性: 0

星标: 2

关注者: 2

分支: 1

开放问题: 2

类型:symfony-bundle

3.0.0 2024-02-09 05:23 UTC

README

该扩展包提供 PaLabs/php-enum 与 symfony 的集成

Build Status Latest Stable Version License

功能

  • 枚举表单类型
  • 枚举翻译器(带 twig 扩展)
  • Doctrine 集成(枚举字段类型,类型自动生成)
  • 枚举自动初始化器

安装

  1. 使用 composer 安装扩展包
composer require palabs/enum-bundle
  1. 将扩展包添加到扩展包列表(symfony 5 中的 bundles.php 文件)
return [
    PaLabs\EnumBundle\PaEnumBundle::class => ['all' => true],
];
  1. 创建配置(在您的配置目录中)。示例
pa_enum:
  translator:
    domain: 'enums'
  doctrine:
    path:
      - '%kernel.project_dir%/src'

使用方法

翻译器

EnumTranslator 类提供翻译枚举值的方法。示例

use PaLabs\Enum\Enum;
use \PaLabs\EnumBundle\Translator\EnumTranslator;
use Symfony\Component\HttpFoundation\Request;

class ActionEnum extends Enum {
    public static ActionEnum $VIEW, $EXIT;
}
ActionEnum::init();

class FooController {
    private EnumTranslator $enumTranslator;

    public function __construct(EnumTranslator $enumTranslator) {
        $this->enumTranslator = $enumTranslator;           
    }

    public function fooAction(Request $request) {
        return $this->enumTranslator->translate(ActionEnum::$VIEW);
    }

}

枚举表单

EnumType 类为您的表单提供 symfony 表单类型。示例

use PaLabs\EnumBundle\Form\EnumType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class MyForm extends AbstractType {
    public function buildForm(FormBuilderInterface $builder,array $options){
        $builder->add('field', EnumType::class, [
            'type'=>ActionEnum::class,
             'required' => true,        
        ]);
    }
}

Doctrine 类型

该扩展包提供基于您的枚举的 doctrine 类型生成机制。例如,如果您有一个实体类

use Doctrine\ORM\Mapping as ORM;
use PaLabs\Enum\Enum;

class BookType extends Enum {
    public static BookType $MONOGRAPHY, $THESES, $OTHER:
}
BookType::init();

class Book {

    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private ?int $id = null;
    
    /**
     * @ORM\Column(name="name", type="text", nullable=false)
     */
    private string $name = '';
    
    /**
      * @ORM\Column(name="type", type=BookType::class, nullable=false)
     */
    private BookType $type;
    
    public function __construct() {
        $this->type = BookType::$MONOGRAPHY;
    }
}

扩展包将自动为 BookType 枚举生成一个 doctrine 类型并将其添加到 doctrine 类型配置中。您可以指定枚举所在的路径

pa_enum:
  doctrine:
    path:
      - '%kernel.project_dir%/src'
      - '%kernel.project_dir%/vendor/my-bundle/src'

枚举初始化器

为了避免为每个枚举手动调用 Enum::init(),您可以使用枚举初始化器。只需将其添加到扩展包配置

pa_enum:
    initializer:
      path:
        - - '%kernel.project_dir%/src'

并且扩展包将自动为路径中的每个枚举调用 init()。init() 将在扩展包启动时调用。