Как получить параметры запроса в 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->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
а теперь $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 пакета.
Если вам нужно получить значение из 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');
}