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