Как получить параметры запроса в symfony2

Я очень новичок в symfony. На других языках, таких как java и другие, я могу использовать request.getParameter('parmeter name') чтобы получить значение.

есть ли что-то подобное, что мы можем сделать с symfony2.
Я видел несколько примеров, но ни один из них не работает для меня. Предположим, у меня есть поле с именем имя пользователя. В действии формы я попытался использовать что-то вроде этого:

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

Я также пробовал

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

и

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

но ни один из вариантов не работает.Однако следующее работало нормально:

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

где я делаю неправильно в использовании getParameter() метод. Любая помощь будет оценена.

13 ответов


именование не все, что интуитивно:

use Symfony\Component\HttpFoundation\Request;

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

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

Я делаю это еще проще:

use Symfony\Component\HttpFoundation\Request;

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

другой вариант-ввести свои параметры в определении функции действия:

use Symfony\Component\HttpFoundation\Request;

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

который, затем предполагает, что вы определили {foo} и {bar} как часть вашего шаблона URL в вашей маршрутизации.файл yml:

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

Вы можете использовать следующий код, чтобы получить значения полей формы

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');
}

или вы также можете получить все значения формы как массив, используя

$request->request->all()

попробовать

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

проверьте имя атрибута вашего Формулярного поля


внутри контроллера:

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

ваши возможности:

  1. простой:
    • $request->request->get('param') ($_POST['param']) или
    • $request->query->get('param') ($_GET['param'])
  2. хорошие формы Symfony со всей проверкой, переносом значений и рендерингом форм с ошибками и многими другими особенности:
  3. что-то среднее (см. пример ниже)
<?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,
    ]);
}

подробнее о OptionsResolver - http://symfony.com/doc/current/components/options_resolver.html


а теперь $this->getRequest() метод устарел, вам нужно ввести Request объект в действие контроллера, как это:

public function someAction(Request $request)

после этого вы можете использовать одно из следующих.

если вы хотите получить данные POST из запроса, используйте следующее:

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

но если вы хотите получить данные из запроса, используйте это:

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

вы можете сделать это так:

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

иногда, когда атрибуты защищены, вы не можете иметь доступ, чтобы получить значение для общего метода доступа:

(пост)

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

(GET)

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

(универсальный)

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

большинство случаев, таких как получение строки запроса или параметров формы, рассматриваются в ответах выше.

при работе с необработанными данными, как необработанная строка JSON в теле, которую вы хотели бы дать в качестве аргумента json_decode() метод Request::getContent() можно использовать.

$content = $request->getContent();

дополнительную полезную информацию о HTTP-запросах в Symfony можно найти на HttpFoundation пакета.


$request = Request::createFromGlobals();
$getParameter = $request->get('getParameter');

Если вам нужно получить значение из Select, вы можете использовать:

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

попробуйте это, это работает

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

в отношении


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