Как добавить поле, которое не включает в себя FormType?

Я не знаю, сталкивался ли ты с таким сценарием. Я использую mongodb в Symfony. Я делаю документ, чтобы подключить его к mongodb. Я создаю название коллекции Товар и поля под продуктом

- id
- name
- price

Я добавляю тип формы для проверки при отправке формы с использованием AJAX.

class ProductType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('name', TextType::class)
->add('price', TextType::class);
}

public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults(
array(
'data_class' => 'Acme\StoreBundle\Document\Product',
'csrf_protection' => false
)
);
}
}

Но я хочу добавить поле, которое не входит в ProductType. Когда время я это сделаю. Я получаю ошибку.

"This form should not contain extra fields."

Это мой ajax для отправки формы

public updateCompleted(id:string,name:string,price:string,selected:string){

let data = {name:name,price:price,selected:selected};
let _data = {product: data};

return $.ajax({
url:this.setCompletedUrl(id),
type: "PATCH",
data:_data,
async:false
});
}

Другое поле, о котором я говорю, это выбранное. Я хочу проверить это в моем бэкэнде выбранную строку, которую выбирает клиент. Но, похоже, Symfony хочет, чтобы я добавил это поле в мой документ Product. Есть ли другой способ сделать это?

0

Решение

Попробуйте использовать опцию ‘mapped’ поля формы:

class ProductType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class)
->add('price', TextType::class);
->add('selected', TextType::class, [
'mapped' => false
])
}

public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(
array(
'data_class' => 'Acme\StoreBundle\Document\Product',
'csrf_protection' => false
)
);
}
}

В этом случае для selected не будет установлен объект Product, но выбранное значение вы можете найти в объекте Request.

1

Другие решения

Добавьте свое новое поле в FormType, В настройках установите 'mapped' => false, Так что поле не обязательно должно быть в вашем документе Product.

Вы можете получить значение нового поля через объект формы.

Надеюсь, это поможет.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector