У меня есть список пользователей, которые могут быть активными или нет.
Для всех пользователей я создаю поле выбора с ролью, которую может иметь пользователь.
Во время рендеринга я отображаю только поля для активных пользователей.
После завершения отображения формы я использую
{{form_end (form, {‘render_rest’: false})}}
чтобы избежать ненужных полей для визуализации. Эти неопределяемые поля препятствуют проверке формы.
Я пытался создать скрытое поле выбора, но не смог.
Вот соответствующий код:
$form = $this->createFormBuilder()->getForm(); //create empty form
foreach ($HRsInThisProject as $key => $HR)
{
$form->add('roleOf_'.$key, 'choice', array('choices' => $rolesListForForm,'required' => true,'data' => $HR['role'], 'label' => false, ));
}
$form->add('save', 'submit', array('label' => 'Save'));
У меня в ветке есть:
<table>
<tr>
<td>User ID</td>
<td>Name</td>
<td>Role</td>
<td>Started</td>
</tr>
{% for key, HR in HRs %}
{% if HR.is_active %}
<tr>
<td>{{ key }}</td>
<td>{{ HR.name }}</td>
<td>{{ form_row(form['roleOf_' ~ key]) }}</td>
<td>{{ HR.started_at|date('Y-m-d H:i:s') }}</td>
</tr>
{% endif %}
{% endfor %}
</table>
<br>
{{ form_row(form.save) }}
{{ form_end(form, {'render_rest': false}) }}
Это то, что я хотел бы иметь (обратите внимание, что отображаются только соответствующие поля):
Если с другой стороны, если я использую:
{{form_end (форма)}}
Тогда код работает, но я вижу ненужные поля:
Я также попытался сделать ненужные поля необязательными, но проблема сохраняется.
Любая идея?
Чтобы это поле не отображалось, вы должны удалить его из FormType
и назначить значение по умолчанию для этого поля в объекте как
Class User {
protected $unnecessary = "Some Value";
}
Или вы можете использовать FormEvents
назначить значение по умолчанию для этого свойства
http://symfony.com/doc/current/components/form/form_events.html
Или вы можете сделать поле скрытым
http://symfony.com/doc/current/reference/forms/types/hidden.html
Суть в том, как только вы добавите свойство к FormType
это поле будет отображено наверняка.
{{ form_end(form, {'render_rest': false}) }}
Если поле формы не отображается, то его значение будет отправлено как NULL
,
Поэтому, если вы уже установили значение для этого поля, оно будет аннулировано.