Я не знаю, сталкивался ли ты с таким сценарием. Я использую 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. Есть ли другой способ сделать это?
Попробуйте использовать опцию ‘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.
Добавьте свое новое поле в FormType
, В настройках установите 'mapped' => false
, Так что поле не обязательно должно быть в вашем документе Product.
Вы можете получить значение нового поля через объект формы.
Надеюсь, это поможет.