Как получить параметры запроса в symfony2
Я очень знаком с symfony. На других языках, таких как java и другие, я могу использовать request.getParameter('parmeter name')
для получения значения.
Есть ли что-то подобное, что мы можем сделать с symfony2.
Я видел несколько примеров, но никто не работает для меня. Предположим, у меня есть поле формы с именем имя пользователя. В форме action я попытался использовать что-то вроде этого:
$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()
. Любая помощь будет оценена.
Ответы
Ответ 1
Именование не все настолько интуитивно понятное:
use Symfony\Component\HttpFoundation\Request;
public function updateAction(Request $request)
{
// $_GET parameters
$request->query->get('name');
// $_POST parameters
$request->request->get('name');
Ответ 2
Я делаю это еще проще:
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 }
Ответ 3
Вы можете использовать следующий код, чтобы получить значения полей формы
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()
Ответ 4
попробовать
$request->request->get('acme_demobundle_usertype')['username']
проверить имя атрибута вашего поля формы
Ответ 5
Внутри контроллера:
$request = $this->getRequest();
$username = $request->get('username');
Ответ 6
Ваши варианты:
- Простой:
-
$request->request->get('param')
($_POST['param']
) или
-
$request->query->get('param')
($_GET['param']
)
- Хорошие формы Symfony со всей валидацией, трансляцией значений и рендерингом форм с ошибками и многими другими функциями:
- Что-то между ними (см. пример ниже)
<?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
Ответ 7
Так как теперь метод $this->getRequest()
устарел, вам нужно добавить объект Request
в действие вашего контроллера следующим образом:
public function someAction(Request $request)
после этого вы можете использовать одно из следующих.
Если вы хотите получить данные POST из запроса, используйте следующую команду:
$request->request->get('var_name');
но если вы хотите получить данные GET из запроса, используйте это:
$request->query->get('var_name');
Ответ 8
Вы можете сделать это так:
$clientName = $request->request->get('appbundle_client')['clientName'];
Иногда, когда атрибуты защищены, у вас нет доступа для получения значения для общего метода доступа:
(POST)
$clientName = $request->request->get('clientName');
(ГЭТ)
$clientName = $request->query->get('clientName');
(Generic)
$clientName = $request->get('clientName');
Ответ 9
Большинство случаев, таких как получение строки запроса или параметров формы, описаны в ответах выше.
При работе с необработанными данными, например необработанной строкой JSON в теле, которую вы хотите передать в качестве аргумента json_decode()
, можно использовать метод Request::getContent()
.
$content = $request->getContent();
Дополнительные полезные сведения о HTTP-запросах в Symfony можно найти в документации по пакету HttpFoundation.
Ответ 10
$request = Request::createFromGlobals();
$getParameter = $request->get('getParameter');
Ответ 11
use Symfony\Component\HttpFoundation\Request;
public function indexAction(Request $request, $id) {
$post = $request->request->all();
$request->request->get('username');
}
Спасибо, вы также можете использовать приведенный выше код
Ответ 12
Если вам нужно получить значение из выбора, вы можете использовать:
$form->get('nameSelect')->getClientData();
Ответ 13
Попробуйте это, он работает
$this->request = $this->container->get('request_stack')->getCurrentRequest();
Привет
Ответ 14
public function indexAction(Request $request)
{
$data = $request->get('corresponding_arg');
// this also works
$data1 = $request->query->get('corresponding_arg1');
}
Ответ 15
Для пользователей Symfony 4:
$query = $request->query->get('query');