Urmat Zhenaliev
Urmat Zhenaliev

Reputation: 1547

How to handle request from $_POST where no Symfony form is defined on the request, without searching form classname?

How can I handle request data from the $_POST data itself. I mean if I try to handle the form like this: $form->handleRequest($request);, Symfony would try to get the data from $_POST['form_classname'], but I want to fill my form class straight from base $_POST variables.

Actually I want to handle the information from the outer site. And I have to develop something like an API. But without authorization, tokens, etc...

So I decided to build the form with some properties I need. After validation the form might do some logic.

Here is an example of $_POST I have to handle

Function=TransResponse&RESULT=0&RC=00&AUTHCODE=745113

As you can see, there is no form name in request. The $form->handleRequest($request); works only if the request was like an

[form_name][Function]=TransResponse&[form_name][RESULT]=0&[form_name][RC]=00&[form_name][AUTHCODE]=745113

But I can't change the request format.

Upvotes: 0

Views: 871

Answers (2)

Pieter van den Ham
Pieter van den Ham

Reputation: 4484

Use

  • $this->get('form.factory')->createNamed('')
  • $this->get('form.factory.)->createNamedBuilder('')

to create a Form or FormBuilder respectively that uses the whole $_POST/$_GET array for its parameters.

Example:

/**
 * @Route("/testRoute")
 * @param Request $request
 * @return Response
 */
public function testAction(Request $request): Response
{
    $form = $this->get('form.factory')->createNamedBuilder('', FormType::class, null, ['csrf_protection' => false])
        ->add('text', TextType::class)
        ->setMethod('GET')
        ->getForm();

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        return new Response($form['text']->getData());
    }

    return new Response('<a href="?text=123">Submit me</a>');
}

Upvotes: 0

Urmat Zhenaliev
Urmat Zhenaliev

Reputation: 1547

Just put in your form class

/** @inheritdoc */
function getBlockPrefix() {
    return '';
}

Here is the information about this method Documentation

Upvotes: 0

Related Questions