This bundle simplify access of your enum values or class constants in Twig.
Install extension using composer:
$ composer require jdecool/twig-constant-accessor-bundle
If you don't use Symfony Flex, you have to enabled the bundle in your config/bundles.php
configuration:
<?php
return [
// ...
JDecool\Bundle\TwigConstantAccessorBundle\JDecoolTwigConstantAccessorBundle::class => ['all' => true],
];
Register the class you want to access constant in your configuration file :
twig_constant_accessor:
classes:
- AppBundle\Model\Foo
- { class: 'AppBundle\Model\Bar' }
- { class: 'AppBundle\Model\FooBar', alias: 'FooBarAlias' }
- { class: 'AppBundle\Model\ConstantClass', matches: '/^RULE_/' } # matches accept an regexp compatible with the preg_match function
You can also register a class in your container configuration using the twig.constant_accessor
tag :
services:
my_service:
class: Namespace\To\ServiceClass
tags:
- { name: twig.constant_accessor }
my_collection:
class: MyClass
tags:
- { name: twig.constant_accessor, alias: 'MyClassAlias' }
filtered_constants:
class: ConstantsClass
tags:
- { name: twig.constant_accessor, matches: '/^RULE_/' } # matches accept an regexp compatible with the preg_match function
Or you can use the #[AsTwigConstantAccessor]
attribute on your class :
use JDecool\Bundle\TwigConstantAccessorBundle\Annotation\AsTwigConstantAccessor;
#[AsTwigConstantAccessor]
class MyClass
{
// ...
}
After you can access your class constant in your templates :
{{ ServiceClass.MY_CONSTANT }}
{{ MyClassAlias.KEY }}
{% if 'value' == ServiceClass.My_CONSTANT %}Test is OK{% endif %}