PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Tuesday, January 18, 2022

[FIXED] Symfony2 Form is always empty after submitting

 January 18, 2022     forms, html, php, symfony     No comments   

Issue

I'm new with Symfony2 (2.4.4).

I want to create a HTML layout which shows always a form on top (searchbar). I send the form via post and would like to redirect to another controller, which should pass the user input and generate an output. I created a new function like this:

public function searchFormAction(Request $request)
{
    //$defaultData = array('sstring' => 'Suche');
    $form = $this->createFormBuilder()
        ->add('fnr', 'hidden')
        ->add('sstring', 'search', array('label' => false))
        ->add('submit', 'submit', array('label' => 'suchen'))
        ->getForm();

    $form->handleRequest($request);

    if($request->isMethod('POST'))
    {
        return $this->redirect('SchmanEmployeeBundle:Employee:search', array(
            'sstring' => $form->get('sstring')->getData();
        ));
    }
    

    return $this->render('SchmanEmployeeBundle:Employee:searchForm.html.twig', array(
        'form' => $form->createView()
    ));
}

I extended my base layout (base.html.twig) and include the form with the render function

{% render(controller('SchmanEmployeeBundle:Employee:searchForm')) %}

This works fine and the form is always present in my layout. The given HTML looks like this:

<form name="form" method="post" action="/app_dev.php/">
<div><input type="search" id="form_sstring" name="form[sstring]" required="required"></div>
<div><button type="submit" id="form_submit" name="form[submit]">suchen</button></div>

Now I have 3 questions:

  1. If I submit the form, I don't want to be redirected to the searchAction Controller. This is because the $request->isMethod is always GET. Why? The form actions is post?

  2. In the Symfony Webtool the form section is also empty. I see all form fields (sstring) and the data is always null. Where's the user input?


Solution

First off, your form is set to be POST by default, so you should be good. Second, you don't pass any data to be filled by your form, and I think you should. Third, you don't check if the form is valid, which includes the test if it's submitted. You should do this:

$defaultData = array(); // No need for a class object, array is enough
$form = $this->createFormBuilder($defaultData)
    ->add('fnr', 'hidden')
    ->add('sstring', 'search', array('label' => false))
    ->add('submit', 'submit', array('label' => 'suchen'))
    ->getForm();

$form->handleRequest($request);

if($form->isValid())
{
    // Happens if the form is submitted
    return $this->redirect('SchmanEmployeeBundle:Employee:search', array(
        'sstring' => $form->get('sstring')->getData(); // TODO: This will probably produce an error, fix it
    ));
}

return $this->render('SchmanEmployeeBundle:Employee:searchForm.html.twig', array(
    'form' => $form->createView()
));

Also, I think you shouldn't worry about the form method because you don't have different implementations for other methods. This is the usual way the forms are handled in Symfony. You should read on forms in detail before proceeding, the article is quite informative.



Answered By - Andrej Mohar
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing