Resolve PHP backed enums and class constants in Sulu visibleCondition and disabledCondition expressions.
composer require amoifr/sulu-condition-resolver-bundleUse enum() and const() placeholders in your form XML definitions:
<!-- String backed enum -->
<property name="title" visibleCondition="status == enum(App\Enum\Status::ACTIVE)">
<!-- Int backed enum -->
<property name="priority_field" disabledCondition="priority == enum(App\Enum\Priority::HIGH)">
<!-- Class constant -->
<property name="draft_notice" visibleCondition="type == const(App\Entity\Page::TYPE_DRAFT)">
<!-- Multiple expressions -->
<property name="special" visibleCondition="status == enum(App\Enum\Status::ACTIVE) && priority == enum(App\Enum\Priority::HIGH)">The bundle resolves these at metadata build time, producing clean JS-evaluable expressions like status == 'active'.
The bundle registers a FormMetadataVisitorInterface that:
- Traverses all form items (including sections and field types) recursively
- Detects
enum(FQCN::CASE)andconst(FQCN::CONST)invisibleConditionanddisabledCondition - Resolves them to their scalar values at metadata build time
- The frontend receives clean expressions it can evaluate as usual
- Enums must be backed enums (string or int)
- Constants must resolve to scalar values (string, int, float, bool)
- No
service()support — metadata should not depend on runtime state
MIT