Ich sende ein Formular und handhabe es in der Sylius ResourceController
, die das Formular einreicht und validiert. Symfony 2 Formularfehler "Dieses Formular sollte keine zusätzlichen Felder enthalten." Beim Absenden eines Formulars
Dies ist die Form in situ:
<tr>
<form method="post" action="{{ path('backend_course_row_update', {
'courseeId' : course.id, 'id' : row.id }) }}" novalidate>
{{ form_widget(form.channel) }}
{{ form_widget(form.name) }}
{% for size in form.sizes %}
{{ form_row(size) }}
{% endfor %}
{{ form_row(form._token) }}
<td align="right" style="width: 140px;">
<button class="btn btn-primary" type="submit">
<i class="glyphicon glyphicon-save"></i>Save
</button>
</td>
</form>
</tr>
Die "Form" ist hier ein CourseGuideRowType
, die wie folgt aussieht:
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('channel', 'channel_choice', array(
'required' => false
))
->add('name', 'text')
->add('sizes', 'course_guide_row_sizes', array('numColumns' => $options['numColumns']))
;
}
CourseGuideRowSizesType
dann wie folgt aussieht:
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
for ($i = 0; $i < $options['numColumns']; $i++) {
$builder->add($i, 'text', array('required' => 'false'));
}
$builder->addEventListener(
FormEvents::PRE_SUBMIT,
function (FormEvent $event) use ($options) {
$form = $event->getForm();
for ($i = 0; $i < $options['numColumns']; $i++) {
if (empty($form->get($i)->getData())) {
$form->remove($i, 'text');
}
}
}
);
}
Allerdings, wenn ich das Formular abschicken und die Fehler wie folgt auswerfen:
$form->submit($request, !$request->isMethod('PATCH'))->getErrors()
ich:
"This form should not contain extra fields."
#messageParameters: array:1 [▼
"{{ extra_fields }}" => "0", "1", "2", "3", "4", "5"
]
-extraData: array:6 [▼
0 => "36"
1 => "38"
2 => "40"
3 => "42"
4 => "44"
5 => "46"
]
Die "zusätzliche Daten" ist die "Größen" ein.
Mache ich hier etwas eklatant falsch?
EDIT Juni 2017: Sie können jetzt 'allow_extra_fields' verwenden, um diesen Fehler zu unterdrücken. http://symfony.com/doc/current/reference/forms/types/form.html#allow-extra-fields
Normalerweise wird der Fehler ausgelöst, wenn vom Benutzer übermittelte Daten mehr Eingaben enthalten, als im Formular definiert sind. Symfony hat einen eingebauten Typ, der bereits das tut, was Sie manuell tun wollen: http://symfony.com/doc/current/reference/forms/types/collection.html. – Karolis
Auch nicht die beste Lösung, aber Sie können auch zusätzliche Felder erlauben, indem Sie 'allow_extra_fields' => true 'im Optionsresolver setzen. – nakashu
Hinweis: Allow_extra_fields Option wurde in Symfony v2.6 hinzugefügt – Munir