Отображение ограничений Symfony не видит переменные env

У меня есть следующий файл:

      VAR=8888

Я хочу использовать эту переменную из.envфайл в файле конфигурации ограничений. Итак, я делаю это:

      <?xml version="1.0" encoding="UTF-8" ?>
<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd">
    <class name="App\Entity">
        <property name="page">
            <constraint name="EqualTo">
                <option name="value">%env(string:VAR)%</option>
            </constraint>
        </property>
    </class>
</constraint-mapping>

Но значение env не интерпретируется. Он просто печатает что-то вроде этого:\"%env(string:VAR)%\"

Также я попытался сначала установить параметр вconfig.yaml, так:

      parameters:
    var: '%env(resolve:VAR)%'

А затем попробуйте использовать так:

      ...
<constraint name="EqualTo">
    <option name="value">%var%</option>
</constraint>
...

Но это тоже не работает.

Я использую php v. 8.1 с symfony v. 6.1. Я пытался удалить кеш и перезапустить контейнеры Docker, но это не помогло :(

1 ответ

Одним из решений этого пользователя является создание пользовательского валидатора, подобного этому:

      class CustomConstraintValidator extends ConstraintValidator
{
    private string $var

    public function __construct(string $var
    {
        $this->var = $var
    }

    public function validate($value, Constraint $constraint): void
    {
        if ($value === $this->var) {
            return;
        }
        $this->context->buildViolation($constraint->message)->addViolation();
    }
}

Затем создайте пользовательское ограничение:

      class CustomConstraint extends Constraint
{
    public string $message = 'Invalid VAR';
}

Затем установите параметр вservices.yaml:

      ...
services:
    CustomConstraintValidator:
        arguments:
            $var: '%env(resolve:VAR)%'

А затем используйте его в файле XML следующим образом:

      ...
<property name="page">
     <constraint name="CustomConstraint" />
</property>
Другие вопросы по тегам