У меня есть несколько версий существующей формы. У формы есть все те же вопросы, но метки для формы различаются в зависимости от того, кто ее заполняет (1-й против 3-го лица).
Кто-нибудь есть идеи о том, как подходить к этому. Я знаю, что могу создать другой набор шаблонов, но форма довольно большая, и было бы неплохо изменить ее на лету.
Я спрашиваю, потому что я нахожу, что сумка для инструментов Symfony велика, и я боюсь, что я что-то пропускаю. На данный момент единственным способом, который я вижу возможным, является использование прослушивателя событий.
Любая помощь приветствуется!
Кажется, вы говорите строго о слое презентации. Я бы расследовал использование переводов для этого. Наличие нескольких классов форм или логики в вашем контроллере будет расстраивать. Вы упомянули первого и третьего лиц. Как вы определяете, находится ли пользователь в одной из этих групп? Возможно, вы создаете службу обертки для компонента перевода, который соответственно проверяет ваши требования и делегатов. Кажется, что все твои дела говорят на другом языке.
Ваша основная проблема заключается в определении того, кто является первым лицом и кто является третьим лицом. Это меняется на протяжении всего сеанса? Если этого не сделать в процессе аутентификации (избиратель безопасности может работать для определения) или/и сохранить его в сеансе, если он изменится. Переопределите службу перевода, чтобы использовать свою обертку, чтобы принять решение о том, какой перевод использовать.
Я вовсе не говорю, что это легко, но я думаю, что с использованием компонента перевода, аутентификации в качестве директора и контейнера службы вы можете получить то, что хотите, а не путать свою базу кода.
label
? Похоже, что единственный способ завершить это на данный момент - это явно запросить тег внутри перевода.
У вас есть 2 варианта:
"""
{{ form_start(form) }}
{{ form_errors(form) }}
{{ form_row(form.field1) }}
{{ form_row(form.field2) }}
{{ form_end(form) }}
"""
Выполнение этого способа позволяет определить форму, отображаемую в зависимости от того, кто ее просматривает. Затем вы можете определить в своих сервисах метод для вызова с вашего контроллера для установки этого класса до вызова действия контроллера.