У меня есть список пользователей, которые могут быть активными или нет.
Для всех пользователей я создаю поле выбора с той ролью, которую может иметь пользователь.
Во время рендеринга я обрабатываю только поля для активных пользователей.
После завершения отображения формы я использую
{{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 (form)}}
Затем код работает, но я вижу ненужные поля:
Я также пытался сделать ненужные поля ненужными, но проблема не устранена.
Есть идеи?
{{ form_end(form, {'render_rest': false}) }}
Если поле формы не отображается, то его значение будет отправлено как NULL
. Поэтому, если вы уже установили значение для этого поля, оно будет аннулировано.
Чтобы избежать визуализации этого поля, вам необходимо удалить его из формы 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
которое будет отображаться точно.
roleOfX
когда вы устанавливаете поляroleOfX
для визуализации, тогда они не были бы проблемой. Я рискнул бы предположить, что фактическая проблема заключалась в том, что вы не рендерили токен csrf (см. Symfony.com/doc/current/book/forms.html#csrf-protection ), который будет отображаться либо в catch allform_rest()/form_end(form)
или непосредственно с помощьюform_row(form._token)
(если используется имя поля по умолчанию_token
).