210
votes

I am very new to symfony. In other languages like java and others I can use request.getParameter('parmeter name') to get the value.

Is there anything similar that we can do with symfony2.
I have seen some examples but none is working for me. Suppose I have a form field with the name username. In the form action I tried to use something like this:

$request = $this->getRequest();
$username= $request->request->get('username'); 

I have also tried

$username = $request->getParameter('username');

and

$username=$request->request->getParameter('username');

But none of the options is working.However following worked fine:

foreach($request->request->all() as $req){
    print_r($req['username']);
}

Where am I doing wrong in using getParameter() method. Any help will be appreciated.

16
You have a typo in line two: $request->request-get() should be $request->request->get(). Could that be it?halfer
have written same in the code.missed out here.sorry for the typo here .still this is not working.Abdul Hamid
Have you (a) checked the manual to ensure that get() is the correct method and (b) turned on PHP notices so you can see if there are any problems? (c) Does Symfony 2 have a debug toolbar like symfony 1, so you can see if you've made any errors?halfer
Are you confusing firstname and username?greg0ire

16 Answers

434
votes

The naming is not all that intuitive:

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request)
{
    // $_GET parameters
    $request->query->get('name');

    // $_POST parameters
    $request->request->get('name');
33
votes

I do it even simpler:

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request)
{
    $foo = $request->get('foo');
    $bar = $request->get('bar');
}

Another option is to introduce your parameters into your action function definition:

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request, $foo, $bar)
{
    echo $foo;
    echo $bar;
}

which, then assumes that you defined {foo} and {bar} as part of your URL pattern in your routing.yml file:

acme_myurl:
    pattern:  /acme/news/{foo}/{bar}
    defaults: { _controller: AcmeBundle:Default:getnews }
18
votes

You can Use The following code to get your form field values

use Symfony\Component\HttpFoundation\Request;

public function updateAction(Request $request)
{
    // retrieve GET and POST variables respectively
    $request->query->get('foo');
    $request->request->get('bar', 'default value if bar does not exist');
}

Or You can also get all the form values as array by using

$request->request->all()
13
votes

try

$request->request->get('acme_demobundle_usertype')['username']

inspect attribute name of your formular field

9
votes

Inside a controller:

$request = $this->getRequest();
$username = $request->get('username');
9
votes

Your options:

  1. Simple:
    • $request->request->get('param') ($_POST['param']) or
    • $request->query->get('param') ($_GET['param'])
  2. Good Symfony forms with all validation, value transormation and form rendering with errors and many other features:
  3. Something in between (see example below)
<?php
/**
 * @Route("/customers", name="customers")
 *
 * @param Request $request
 * @return Response
 */
public function index(Request $request)
{
    $optionsResolver = new OptionsResolver();
    $optionsResolver->setDefaults([
        'email' => '',
        'phone' => '',
    ]);
    $filter = $optionsResolver->resolve($request->query->all());

    /** @var CustomerRepository $customerRepository */
    $customerRepository = $this->getDoctrine()->getRepository('AppBundle:Customer');

    /** @var Customer[] $customers */
    $customers = $customerRepository->findFilteredCustomers($filter);

    return $this->render(':customers:index.html.twig', [
        'customers' => $customers,
        'filter' => $filter,
    ]);
}

More about OptionsResolver - http://symfony.com/doc/current/components/options_resolver.html

8
votes

As now $this->getRequest() method is deprecated you need to inject Request object into your controller action like this:

public function someAction(Request $request)

after that you can use one of the following.

If you want to fetch POST data from request use following:

$request->request->get('var_name');

but if you want to fetch GET data from request use this:

$request->query->get('var_name');
6
votes

You can do it this:

$clientName = $request->request->get('appbundle_client')['clientName'];

Sometimes, when the attributes are protected, you can not have access to get the value for the common method of access:

(POST)

 $clientName = $request->request->get('clientName');

(GET)

$clientName = $request->query->get('clientName');

(GENERIC)

$clientName = $request->get('clientName');
3
votes

Most of the cases like getting query string or form parameters are covered in answers above.

When working with raw data, like a raw JSON string in the body that you would like to give as an argument to json_decode(), the method Request::getContent() can be used.

$content = $request->getContent();

Additional useful informations on HTTP requests in Symfony can be found on the HttpFoundation package's documentation.

1
votes
$request = Request::createFromGlobals();
$getParameter = $request->get('getParameter');
1
votes
use Symfony\Component\HttpFoundation\Request;

public function indexAction(Request $request, $id) {

    $post = $request->request->all();

    $request->request->get('username');

}

Thanks , you can also use above code

1
votes

For symfony 4 users:

$query = $request->query->get('query');
1
votes

#www.example/register/admin

  /**
 * @Route("/register/{role}", name="app_register", methods={"GET"})
 */
public function register(Request $request, $role): Response
{
 echo $role ;
 }
0
votes

If you need getting the value from a select, you can use:

$form->get('nameSelect')->getClientData();
0
votes

Try this, it works

$this->request = $this->container->get('request_stack')->getCurrentRequest();

Regards

0
votes
public function indexAction(Request $request)
{
   $data = $request->get('corresponding_arg');
   // this also works
   $data1 = $request->query->get('corresponding_arg1');
}