2016-02-25 12 views
5

सबमिट करते समय मैं एक फॉर्म सबमिट कर रहा हूं और इसे सिलीयस ResourceController में रखता हूं जो फ़ॉर्म सबमिट करता है और इसे मान्य करता है।सिम्फनी 2 फॉर्म त्रुटि "इस फ़ॉर्म में अतिरिक्त फ़ील्ड नहीं होना चाहिए।" फॉर्म

<tr> 
    <form method="post" action="{{ path('backend_course_row_update', { 
'courseeId' : course.id, 'id' : row.id }) }}" novalidate> 
    {{ form_widget(form.channel) }} 
    {{ form_widget(form.name) }} 
    {% for size in form.sizes %} 
     {{ form_row(size) }} 
    {% endfor %} 
    {{ form_row(form._token) }} 
    <td align="right" style="width: 140px;"> 
     <button class="btn btn-primary" type="submit"> 
      <i class="glyphicon glyphicon-save"></i>Save 
     </button> 
    </td> 
    </form> 
</tr> 

"फार्म" यहाँ एक CourseGuideRowType है, जो इस तरह दिखता है:

/** 
* {@inheritdoc} 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    for ($i = 0; $i < $options['numColumns']; $i++) { 
     $builder->add($i, 'text', array('required' => 'false')); 
    } 
    $builder->addEventListener(
     FormEvents::PRE_SUBMIT, 
     function (FormEvent $event) use ($options) { 
      $form = $event->getForm(); 
      for ($i = 0; $i < $options['numColumns']; $i++) { 
       if (empty($form->get($i)->getData())) { 
        $form->remove($i, 'text'); 
       } 
      } 
     } 
    ); 
} 
:

/** 
* {@inheritdoc} 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('channel', 'channel_choice', array(
      'required' => false 
     )) 
     ->add('name', 'text') 
     ->add('sizes', 'course_guide_row_sizes', array('numColumns' => $options['numColumns'])) 
    ; 
} 

CourseGuideRowSizesType तो इस तरह दिखता है

यह सीटू रूप है

हालांकि, जब मैं फॉर्म जमा करता हूं और इस तरह की त्रुटियों को डंप करता हूं:

$form->submit($request, !$request->isMethod('PATCH'))->getErrors()

मैं:

"This form should not contain extra fields." 
     #messageParameters: array:1 [▼ 
     "{{ extra_fields }}" => "0", "1", "2", "3", "4", "5" 
     ] 
     -extraData: array:6 [▼ 
      0 => "36" 
      1 => "38" 
      2 => "40" 
      3 => "42" 
      4 => "44" 
      5 => "46" 
     ] 

"अतिरिक्त डेटा" "आकार" क्षेत्रों है।

क्या मैं यहां कुछ गड़बड़ कर रहा हूं?

जून 2017 संपादित करें: अब आप इस त्रुटि को दबाने के लिए 'allow_extra_fields' का उपयोग कर सकते हैं। http://symfony.com/doc/current/reference/forms/types/form.html#allow-extra-fields

+0

आम तौर पर त्रुटि तब फेंक दी जाती है जब उपयोगकर्ता द्वारा सबमिट किए गए डेटा में फॉर्म में परिभाषित किए गए अधिक इनपुट होते हैं। सिम्फनी में एक प्रकार का बनाया गया है जो पहले से ही करता है जो आप मैन्युअल रूप से करने की कोशिश कर रहे हैं: http://symfony.com/doc/current/reference/forms/types/collection.html। – Karolis

+1

सबसे अच्छा समाधान भी नहीं है, लेकिन आप विकल्प रिज़ॉल्वर पर 'allow_extra_fields' => true' सेट करके अतिरिक्त फ़ील्ड को भी अनुमति दे सकते हैं। – nakashu

+1

नोट: allow_extra_fields विकल्प सिम्फनी v2.6 – Munir

उत्तर

8

त्रुटि फेंक दी गई है क्योंकि आप प्रत्येक size को form_row के रूप में परिभाषित कर रहे हैं, उदा। :

{% for size in form.sizes %} 
    {{ form_row(size) }} // Extra field defined here 
{% endfor %} 

के रूप में टिप्पणी में कहा गया है, आप CollectionType का उपयोग करें या बना सकते हैं और इसके बारे में एक ही तरह से अपने कस्टम FormType उपयोग करना चाहिए।

यह आपके फॉर्म में अतिरिक्त फ़ील्ड मैन्युअल रूप से परिभाषित करने की आवश्यकता से बच जाएगा और बीटीडब्ल्यू त्रुटि को हटा देगा।

संपादित

@nakashu एक समाधान के क्षण में प्रयोग की जाने वाली याद दिलाया गया है।

बस जोड़कर त्रुटि से बचने के अपने CourseGuideRowType में निम्नलिखित:

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'allow_extra_fields' => true, 
    )); 
} 

लेकिन यह आप से निपटने/बाध्यकारी चरणों के दौरान दुष्प्रभाव से मुक्त नहीं है।

संबंधित मुद्दे