Отображение ограничений 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>