Неопределяемые поля формы Symfony2 препятствуют проверке формы

0

У меня есть список пользователей, которые могут быть активными или нет.

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

Во время рендеринга я обрабатываю только поля для активных пользователей.

После завершения отображения формы я использую

{{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}) }}

Это то, что я хотел бы иметь (обратите внимание, что отображаются только соответствующие поля): Изображение 174551

Если, с другой стороны, если я использую:

{{form_end (form)}}

Затем код работает, но я вижу ненужные поля:

Изображение 174551

Я также пытался сделать ненужные поля ненужными, но проблема не устранена.

Есть идеи?

Теги:
validation
forms
hidden-field

2 ответа

0
{{ form_end(form, {'render_rest': false}) }}

Если поле формы не отображается, то его значение будет отправлено как NULL. Поэтому, если вы уже установили значение для этого поля, оно будет аннулировано.

0

Чтобы избежать визуализации этого поля, вам необходимо удалить его из формы 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 которое будет отображаться точно.

  • 0
    Мне удалось решить эту проблему, объявив «{% do form ['roleOf_' ~ key] .setRendered%}» для каждого из ненужных полей. Это работает как шарм, но ... это правильный путь?
  • 0
    Если ваша форма все еще roleOfX когда вы устанавливаете поля roleOfX для визуализации, тогда они не были бы проблемой. Я рискнул бы предположить, что фактическая проблема заключалась в том, что вы не рендерили токен csrf (см. Symfony.com/doc/current/book/forms.html#csrf-protection ), который будет отображаться либо в catch all form_rest()/form_end(form) или непосредственно с помощью form_row(form._token) (если используется имя поля по умолчанию _token ).
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню