Symfony 2 формирует дополнительные поля


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

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

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

Author: j0k, 2012-01-31

3 answers

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

    // 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);
 20
Author: rhunwicks, 2012-11-22 21:20:42

В моем случае решение было действительно простым, просто добавьте 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 в поле коллекции.

 1
Author: Miguel Chavez, 2013-07-30 16:12:04

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

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

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

И полный учебник по этому адресу (но в Французский):

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

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

 0
Author: Chopchop, 2012-11-29 15:18:03