Symfony2.4 شكل هذا النموذج يجب أن لا تحتوي على حقول إضافية' خطأ

StackOverflow https://stackoverflow.com//questions/23018907

سؤال

أنا أحاول بناء التطبيق على أساس REST api انج AngularJS.كنت أتابع هذا البرنامج التعليمي http://npmasters.com/2012/11/25/Symfony2-Rest-FOSRestBundle.html ولكن تضطر إلى تغيير بعض التفاصيل ( تستهلك طرق ) و الآن عندما أنا بعد إنشاء الكيان الجديد يمكنني الحصول على هذا النموذج يجب أن لا تحتوي على حقول إضافية' خطأ.

class MainController extends Controller
{
    public function indexAction(Request $request)
    {
        $form = $this->createForm(new TaskType(),null,array('action' => $this->generateUrl('post_tasks').'.json'))
                ->add('submit','submit');


        $note_form = $this->createForm(new NoteType())
                ->add('submit','submit');

        return $this->render('MyBundle:Main:index.html.twig',
                array(
                    'form'=>$form->createView(),
                    'note_form'=>$note_form->createView(),
                )
        );
    }
}

بلدي TaskType شكل:

 public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder

            ->add('timeStart','datetime',array(
                'date_widget' => 'single_text',
                'time_widget' => 'single_text',
                'date_format' => 'yyyy-MM-dd',
                'data' => new \DateTime('now')
            ))

            ->add('timeStop','datetime',array(
                'date_widget' => 'single_text',
                'time_widget' => 'single_text',
                'date_format' => 'yyyy-MM-dd',
                'data' => new \DateTime('now')
            ))

            ->add('project')  
            ->add('descriptionTask')
            ->add('isCompleted',null,array('required' => false))  
            ->add('isVisible',null,array('required' => false))
        ;
    }

الآن في رأيي أنا تقديم نموذج واحد فقط ولكن أنا في مرحلة الاختبار:

{%extends 'MyBundle::layout.html.twig' %}

{%block content %}

<div ng-view></div>

{{ form(form) }}

{% endblock %}

و هذا هو بقية المراقب التي من المفترض أن تدفق إعطاء الكيان:

public function cpostAction(Request $request)
{
 $entity = new Task();
 $form = $this->createForm(new TaskType(), $entity);
 $form->handleRequest($request);

 if ($form->isValid()) {

     $em = $this->getDoctrine()->getManager();
     $em->persist($entity);
     $em->flush();

     return $this->redirectView(
             $this->generateUrl(
                 'get_organisation',
                 array('id' => $entity->getId())
                 ),
             Codes::HTTP_CREATED
             );
 }

 return array(
     'form' => $form,
 );
}

شيء غريب: عندما وضعت نفس الكود من بقية تحكم MainController, ثم نموذج التحقق من صحة و الكيان الجديد هو يجري مسح ، ولكن ما تبقى تحكم يلقي خطأ...

هل كانت مفيدة؟

المحلول

لأن عندما تقوم بإنشاء شكل إضافة يقدم أزرار ولكن عندما يتم التحقق من صحة لهم كنت لا.محاولة:

public function cpostAction(Request $request)
{
    $entity = new Task();
    $form = $this->createForm(new TaskType(), $entity)->add('submit','submit');
    ...

زر الإرسال من الناحية الفنية الميدانية على الرغم من symfony لن اعرض الخريطة إلى كيان المنشأة بشكل افتراضي.لذلك عند إنشاء شكل مع زر الإرسال ثم تقديم هذا النموذج النموذج الذي تولد في التحقق من صحة تحكم العمل يجب أن يكون أيضا على زر تقديم.

نصائح أخرى

إذا كنت تريد المصادقة على تجاهل حقول إضافية يجب أن تحاول تمرير 'allow_extra_fields' => true كخيار إلى FormBuilder.

إذا كنت تريد تعطيل التحقق من صحة الحقول, يجب إضافة

public function setDefaultOptions(\Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'csrf_protection' => false,
        'validation_groups' => false,
    ));
}

و في buildForm الطريقة:

    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder->addEventListener(FormEvents::POST_SUBMIT, function ($event) {
            $event->stopPropagation();
        }, 900);
        $builder->add('field1','text')
                ->add('field2','text')
                .
                .
                .
    } 

لمزيد من التفاصيل: http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#cookbook-dynamic-form-modification-suppressing-form-validation

إذا كنت تقوم بإضافة واحد SubmitType زر أو ما شابه ذلك ، يمكنك استخدام الحل Chausser المبين

$entity = new Task();
$form = $this->createForm(new TaskType(), $entity)->add('submit','SubmitType::class');

ومع ذلك, في حال كنت تستخدم CollectionType و دمج مجموعة من الباطن أشكال تحتاج إلى تضمين 'allow_add' => true في المعلمات لهذا النوع.على سبيل المثال ، في EntityType شكل البناء:

$builder->add('subEntities', CollectionType::class, array(
                'entry_type' => SubEntityType::class,
                'entry_options' => array('label' => false),
                'allow_add' => true,
            ))

تأكد من القيام بذلك لجميع مستويات التضمين إذا كان لديك مستويات متعددة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top