mesavolt / named-enum
适用于PHP 7.1+的命名枚举
v0.8.4
2023-04-25 14:06 UTC
Requires
- php: >=7.1
- ext-json: *
Requires (Dev)
- php-coveralls/php-coveralls: ^2.0
- phpunit/phpunit: ^9
- twig/twig: ^3.0
This package is auto-updated.
Last update: 2024-09-25 17:10:57 UTC
README
用法
将包添加到您的项目中
composer require mesavolt/named-enum
定义一个扩展 Mesavolt\Enum\NamedEnum
的类,包含您的枚举值和名称。值应定义为类常量(其可见性由您决定),名称应声明在受保护的静态类变量 $VALUE_NAMES
中,索引为相应的值。
快速说明:默认情况下,
NamedEnum::getName($value)
会静默忽略未定义的值,并返回null
。您可以通过扩展Mesavolt\Enum\StrictNamedEnum
来进行严格检查,如果向getName($value)
传递未定义的枚举值,则会抛出\InvalidArgumentException
。
<?php namespace App; use Mesavolt\Enum\NamedEnum; abstract class MyEnum extends NamedEnum { public const FOO = 'foo'; public const BAR = 'bar'; protected static $VALUE_NAMES = [ self::FOO => 'Foo name', self::BAR => 'Bar name', ]; }
在您的项目中使用它
<?php use App\MyEnum; $object = new stdClass(); $object->foo = MyEnum::BAR; echo MyEnum::getName($object->foo); // Bar name
查看 NamedEnum 的公共方法 以获取更多用法示例。
集成
Symfony >=3 与 Twig >1.26
如果您使用的是 Symfony 3.3 中引入的默认 自动配置功能,则只需在您的 services.yml
文件中将 Mesavolt\Twig\NamedEnumExtension
注册为服务即可。Symfony 将将其正确标记以注册到您的应用程序使用的 twig 环境。
如果您不使用自动配置功能或它不可用,则在将扩展注册为服务时需要手动应用标签。
# Symfony 3: app/config/services.yml # Symfony 4: config/services.yaml services: # Use this if you use the default auto-configuring feature of Symfony >=3.3 DI container Mesavolt\Twig\NamedEnumExtension: ~ # Use this if you **don't** use the auto-configuring feature of Symfony >=3.3 DI container app.named_enum_extension: class: Mesavolt\Twig\NamedEnumExtension tags: { name: twig.extension }
然后,您可以在模板中使用扩展提供的 enum_name
过滤器和 enum_name
函数
<?php // src/Controller/HomeController.php // This is an example for Symfony 4. // The code is exactly the same for Symfony 3, only the file locations change. namespace App\Controller; use App\Enum; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class HomeController extends Controller { public function index() { return $this->render('my-template.html.twig', [ 'value1' => Enum::FOO, 'value2' => Enum::BAR ]); } }
{# templates/my-template.html.twig #} You selected "{{ value1|enum_name('\\App\\MyEnum') }}" {# You selected "Foo name" #} You selected {"{ enum_name(value2, '\\App\\MyEnum') }}" {# You selected "Bar name" #}
测试
composer dump-autoload # make sure vendor/autoload.php exists
./vendor/bin/phpunit