Я пытаюсь добавить параметр для всего пакета в мое приложение, чтобы добавить его в свой файл ограничений проверки (validation.yml):
myApp\myBundle\Entity\Contact: properties: name: - NotBlank: { message: "%myvariable%" }
Я обычно добавлял свой параметр в config.yml:
parameters: # Validation config myvariable: Please tell us your name.
Но страница просто отображает текст% myvariable%, а не желаемую строку. Я также хочу использовать этот параметр в моем FormBuilderInterface при добавлении сообщений проверки на страницу для использования в JavaScript. Разрешает ли yml это? Если нет, как включить такой параметр на более высокий уровень?
Нет, в настоящее время это невозможно.
Он не имеет ничего общего с YAML или XML или даже определениями сервисов. Компонент Validator считывает правила проверки самостоятельно – как вы можете видеть, структура сильно отличается от определения сервисов. К сожалению, он не заменяет параметры в ограничениях.
Основная логика находится в \Symfony\Component\Validator\Mapping\Loader\YamlFileLoader
который создается \Symfony\Component\Validator\ValidatorBuilder::getValidator
.
Вы можете сделать это:
validator.builder
. Он построен с использованием %validator.builder.factory.class%::createValidatorBuilder
, но поскольку вам нужно как-то получить пакет параметров, недостаточно зависимостей – используется фабрика классов, а не фабрика услуг.
ValidatorBuilder
. Он должен брать пакет параметров в конструктор или через сеттер. Он должен быть сконфигурирован на шаге (1), который должен быть передан здесь.
Этот класс создавал бы загрузчики файлов другого класса (см. 3), также передавал в него этот пакет параметров.
YamlFileLoader
и YamlFilesLoader
. Дополнительно 2 для каждого формата, который вы хотели бы поддержать. Кроме того, он добавит пакет параметров в конструктор и переопределит некоторые функции. Например, я думаю, что вся обработка параметров может быть выполнена в методе newConstraint
– newConstraint
через параметры, разрешение параметров, а затем вызов родительского метода с замененными параметрами.
Приятно, что Symfony может быть расширен таким образом (возможно, не так хорошо в этом случае использования), но, я думаю, было бы проще просто написать собственное ограничение с помощью специального механизма проверки ограничений, который бы ввел этот параметр в него.
Также рассмотрите обертку вокруг службы валидатора – если вам просто нужно заменить сообщения проверки, вы можете заменить службу validator
, введя в нее оригинал. Дополнительную информацию см. В http://symfony.com/doc/current/service_container/service_decoration.html .