Webghost
Webghost

Reputation: 933

Symfony 2.x Form Field Name

When I render a form, form Filed Name is given as an array. For example: search[item], search[keyword] etc. where search is name of the form.

I'm not great on working with forms but I think, the name should be rendered as simply, name="item" or name="keyword".

I've looked at all the documentation, customizing form rendering topic etc. but I can't find any way to change the default behaviour of Symfony form to render form filed name from 'search[item]' to 'item'. This way, when I ask for the POST data, I can ask simply $this->getRequest()->request->get('item'), as I have to deal with lots of individual parameters.

Help would be great i) To figure out how to achieve what I want. ii) to let me know, why the name is rendered this way. is this the good practice?

Upvotes: 0

Views: 765

Answers (2)

Pete Mitchell
Pete Mitchell

Reputation: 2879

Rather than accessing parameters from the Request object, you can bind the Request object to the form.

For example, in your controller method that you post your form to:

namespace Acme\Controller;

use Symfony\Component\HttpFoundation\Request;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use Acme\Form\MyFormClass;

class MyFormController extends Controller
{
    receiveFormAction(Request $request)
    {
        $form = new MyFormClass();

        // you can specify that a route only accepts a post 
        // request in the routing definition
        if ($request->isMethod('POST')) {
            // this populates the form object with the data 
            // from the form submission
            $form->bind($request);

            if ( ! $form->isValid()) {
                throw new \Exception('Invalid form');
            }

            // an array of the data the format you require
            $data = $form->getData();

            $data['item'];
            $data['keyword'];
            // etc.
        }
    }
}

The above is the way you should be handling forms in Symfony 2, and is how you can leverage the power that the forms component gives you, with validation etc.

Upvotes: 3

Peter Wooster
Peter Wooster

Reputation: 6089

Symfony supports multiple forms on a page. They might be instances of the same form or have similar field names. Having the fields for each form all together in an array makes this easy to do.

Upvotes: 1

Related Questions