Вопрос по symfony – Проверка форм symfony2 с дополнительными полями

15

Я работаю над бэкэндом symfony2 для приложения backbone.js. У меня есть моя модель и форма.

Однако backbone.js отправляет некоторые дополнительные свойства API REST, когда он создает / обновляет модель, и я пытаюсь получить форму для проверки.

Как я могу получить форму в symfony2 для приема дополнительных данных или как я могу отбросить определенные ключи перед привязкой данных к форме?

Ваш Ответ

4   ответа
55

Вам следует использовать параметр & quot; allow_extra_fields & quot ;.

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
        $resolver->setDefaults(
        array(
            'allow_extra_fields' => true
        )
    );
}

Для Symfony 2.8+ используйте configureOptions (OptionsResolver $ resolver) вместо setDefaultOptions (OptionsResolverInterface $ resolver)

Поскольку версия 2.6 теперь помечена как стабильная версия, она должна быть помечена как правильный ответ. @ user1432227
Есть ли какая-либо опция, где я могу установить & lpos_extra_fields & apos; рут для всех моих форм? Я имею в виду некоторую конфигурацию внутри моего конфигурационного файла .. возможно?
@krun вы также можете добавить пример symfony 2.8 / 3. *, где он находится:configureOptions(OptionsResolver $resolver) вместо функции setDefaultOptions.
allow_extra_fields не будет включен в Symfony до версии 2.6. Это будет правильный способ добавить дополнительные поля. mapped = false будет рекомендуемым способом, если вы знаете дополнительные имена полей, которые будут отправлены.
2

Вы можете слушатьFormEvents::BIND_CLIENT_DATA (или жеFormEvents::PRE_BIND если вы используете 2.1 dev) слушатель событий и добавляете / удаляете поля. Увидетьэтот запись поваренной книги.

16

property_path устарел в sf 2.1, используйте & quot; mapped & quot; вместо

$builder
    ->add("firstName", "text")
    ->add("lastName", "text")
    ->add("tac", "checkbox", array(
        "mapped" => false
    )
);
12

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

Пример:

$builder
    ->add('my_additional_field', 'checkbox', array(
        'mapped' => false,
    ));

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

Может быть, вам следует обновить свой ответ, добавив, какая версия действительна.
Я больше не занимаюсь PHP. Пожалуйста, обновите мой ответ, если можете.
+1 Быстрое примечание для & gt; = 2.1: & quot; Новое в версии 2.1: Начиная с 2.1 для этого варианта использования была добавлена сопоставленная опция. & Quot;symfony.com/doc/2.1/reference/forms/types/hidden.html#mapped

Похожие вопросы