Symfony 2 формируют дополнительные поля - PullRequest
5 голосов
/ 31 января 2012

Я изменяю некоторые поля через AJAX, и когда я пытаюсь сохранить форму, я получаю сообщение об ошибке, Extra fields are not allowed.

Как изменить это свойство валидатора, например validatorPass() в sf1.4?
Или его возможное изменение формы для принятия дополнительных полей?

Я использую SonataAdminBundle для создания форм.

Ответы [ 3 ]

20 голосов
/ 14 мая 2012

Вы можете удалить дополнительные поля из данных запроса перед привязкой их к форме:

    // The JSON PUT data will include all attributes in the entity, even
    // those that are not updateable by the user and are not in the form.
    // We need to remove these extra fields or we will get a
    // "This form should not contain extra fields" Form Error
    $data = $request->request->all();
    $children = $form->all();
    $data = array_intersect_key($data, $children);
    $form->bind($data);
1 голос
/ 30 июля 2013

В моем случае решение было действительно простым, просто добавьте allow_add в поле вашей коллекции под моим примером

        ->add('Details', 'collection', array(
            'type' => new DetailsType(),
            'allow_add' => true,
            'allow_delete' => true,
            'label' => ' '
        ))

Вы также можете проверить официальную документацию по этой проблеме http://symfony.com/doc/current/cookbook/form/form_collections.html

Первое, что вам нужно сделать, это сообщить коллекции форм, что она получит неизвестное количество тегов.Итак, вы добавили два тега, и тип формы ожидает получить ровно два, иначе будет выдано сообщение об ошибке: эта форма не должна содержать дополнительных полей.Чтобы сделать это более гибким, добавьте параметр allow_add в поле вашей коллекции.

0 голосов
/ 31 января 2012

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

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

У вас есть пример того, как это работает на github: https://github.com/Keirua/KeiruaProdCustomerDemoBundle

и полное руководство по этому адресу (но по-французски):

http://blog.keiruaprod.fr/2012/01/18/formulaires-dynamiques-avec-symfony2/

PS: Соната, похоже, использует этот способ для добавления полей.

...