2017-01-19 3 views
0

Я не знаю, пережили ли вы такой сценарий. Я использую mongodb в symfony. Я делаю документ, чтобы связать его с mongodb. Я создаю имя коллекции продукта и поля под продуктомКак добавить поле, которое не входит в форму FormType?

- 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." 

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

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. Есть ли другой способ сделать это?

ответ

1

Попробуйте использовать «переведенный» вариант поля формы:

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 
      ) 
     ); 
    } 
} 

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

2

Добавить свое поле в FormType. В параметрах установите 'mapped' => false. Чтобы поле не было в вашем документе Product.

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

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

+0

Я как раз собирался предложить такое же решение! –

Смежные вопросы