Как получить параметры запроса в symfony2 - PullRequest
192 голосов
/ 20 марта 2012

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

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

$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().Любая помощь будет оценена.

Ответы [ 15 ]

401 голосов
/ 20 марта 2012

Имена имен не настолько интуитивны:

use Symfony\Component\HttpFoundation\Request;

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

    // $_POST parameters
    $request->request->get('name');
31 голосов
/ 06 апреля 2012

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

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 в файле routing.yml:

acme_myurl:
    pattern:  /acme/news/{foo}/{bar}
    defaults: { _controller: AcmeBundle:Default:getnews }
17 голосов
/ 21 марта 2012

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

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()
12 голосов
/ 07 января 2013

1001 * попробовать *

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

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

9 голосов
/ 11 ноября 2015

Ваши варианты:

  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

9 голосов
/ 04 декабря 2013

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

$request = $this->getRequest();
$username = $request->get('username');
8 голосов
/ 11 июля 2014

Поскольку метод $this->getRequest() устарел, вам нужно добавить объект Request в действие вашего контроллера следующим образом:

public function someAction(Request $request)

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

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

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

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

$request->query->get('var_name');
6 голосов
/ 20 апреля 2017

Вы можете сделать это следующим образом:

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

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

(POST)

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

(GET)

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

(ОБЩИЕ)

$clientName = $request->get('clientName');
2 голосов
/ 05 сентября 2017

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

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

$content = $request->getContent();

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

1 голос
/ 11 апреля 2019
use Symfony\Component\HttpFoundation\Request;

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

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

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

}

Спасибо, вы также можете использовать код выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...