2016-05-17 3 views
2

В buildForm() Я хотел бы извлечь полный идентификатор/имя текущего узла поля формы. $builder->getName() возвращает только имя текущего узла, но мне нужен полный путь собственности, например:Как Symfony генерирует id/name для поля формы?

id="type_employments_0_location" 
name="type[employments][0][location]" 

Есть ли способ, чтобы генерировать это время строительства формы?

Я работаю над пользовательским обязательным расширением типа поля, которое смотрит на «мандатность» каждого поля по мере создания формы; поэтому мне нужен полный путь свойства в buildForm(), так что я могу изменить массив опций.

ответ

0

В двух словах: Полный путь свойства порожденная рамки формы не доступен для buildForm() но доступно для buildView() и finishView(). Используйте их, если вам нужен доступ к полному пути собственности.

1

От FormConfigInterface, вы должны иметь возможность использовать $builder->getPropertyPath().

Он вернет объект PropertyPathInterface, просто используйте его как строку, чтобы получить путь к реальной собственности как строку (то есть print $builder->getPropertyPath() даст type[employments][0][location]).

+0

Работает ли это в 'buildForm()'? Вызов '$ builder-> getPropertyPath()' в 'buildForm()' кажется, просто возвращает значение null. Вызов '$ form-> getPropertyPath()' в 'buildView()' работает, хотя это слишком поздно в создании формы для достижения того, что я хочу сделать. – nurikabe

+0

Я пробовал его из метода 'buildForm' FormType, и он хорошо работает рядом с моей стороны. – chalasr

+0

Хм .. Какую версию Symfony вы используете? Я в 2.8. – nurikabe

0

На самом деле, это довольно легко. Для каждого типа поля назначено множество переменных.

<label for="{{ form.fieldname.vars.id }}">...</label> 

От симфони Doc (Form Variables Reference):

переменные являются общими для каждого типа поля. Некоторые типы полей могут иметь еще больше переменных, и некоторые переменные здесь действительно применимы только к определенным типам.

Предполагая, что у вас есть переменные формы в шаблоне, и вы хотите ссылки переменных на поле имени, доступ к переменным в делается с помощью общественности вары собственности на объекте FormView.

Form Variables Reference

+0

Мне нужно это в 'builldForm()' перед созданием представления, чтобы я мог добавлять значения в массив опций. Я уточню в вопросе. – nurikabe

Смежные вопросы