2012-03-20 154 views
163

我对symfony非常陌生。在其他语言如java和其他语言中,我可以使用request.getParameter('parmeter name')来获取值。如何在symfony2中获取请求参数

有什么类似的,我们可以用symfony2做。
我看过一些例子,但没有一个适合我。假设我有一个名称为的用户名为的表单字段。在表单动作我试图用这样的:

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

我也曾尝试

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

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

但没有一个选项是working.However以下工作得很好:

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

我在哪里做错了使用getParameter()方法。任何帮助将不胜感激。

+0

你有两行一个错字:'$请求 - >请求 - 得到( )'应该是'$ request-> request-> get()'。这可能吗? – halfer 2012-03-20 11:01:02

+0

在代码中写了相同的内容。在这里输入错误。在这里输入错误.still这不起作用。 – Inventillect 2012-03-20 12:08:22

+0

您是否(a)检查了手册以确保'get()'是正确的方法,并且(b)打开了PHP通知,以便您可以查看是否有任何问题? (c)Symfony 2是否有像symfony 1这样的调试工具栏,所以你可以看看你是否犯了错误? – halfer 2012-03-20 12:31:01

回答

343

的命名是不是所有的直觉:

use Symfony\Component\HttpFoundation\Request; 

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

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

它与PHP使用的不同,但它实际上更有意义。 '$ _GET'数据是来自查询字符串的数据(根本不需要'GET'请求),'$ _POST'数据是来自请求主体的数据(不一定是'POST'请求​​,可以是'PUT ')。 – igorw 2012-03-20 15:43:06

+4

尝试$ request-> query-> get('name');但它也不起作用。 – Inventillect 2012-03-21 11:55:00

+6

如何从PUT请求中获取参数? – Tjorriemorrie 2013-09-09 14:17:18

10

您可以使用下面的代码来获取表单字段值

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() 
+3

$ request-> request-> all() 正在为我工​​作,但像$ request-> query-> get('foo'); 不起作用。 – Inventillect 2012-03-21 12:08:00

29

我这样做更简单:

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}和{条}比如你的路由的URL模式的一部分。 YML文件:

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

在第一个例子中,如果我在查询字符串和POST正文中都有'foo'参数,哪一个将由'$ request-> get('foo')'返回? – 2014-08-27 11:52:12

+0

看起来优先级是GET,PATH,POST http://api.symfony.com/master/Symfony/Component/HttpFoundation/Request.html#method_get – 2014-08-27 11:55:05

+0

这是最好的答案 – steampowered 2015-02-18 23:55:11

11

尝试

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

检查你的表现公式字段的属性名称

+1

+1,因为我认为在所有的答案中,只有这个答案实际上陈述了非显而易见的事情 - 如果在symfony的表单构建器的帮助下自动创建了表单,symfony将表单字段重命名为比“ d期望。像name =“acme_demobundle_userform [field_name]” – userfuser 2014-04-23 12:27:53

+0

你在这里提到的语法不适用于PHP 5.3.10。最低版本支持什么? – 2014-07-29 10:14:18

+2

@justinas说明尝试 $ userType = $ request-> request-> get('acme_demobundle_usertype'); $ username = $ userType ['username']; – 2014-08-08 15:33:11

0

如果您需要获得从选择的值,你可以使用:

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

内部控制器:

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

在新版本的Symfony中,'$ this-> getRequest()'被弃用,倾向于将请求注入到控制器动作中,例如:'public function showAction(Request $ request,$ id);' – 2014-12-04 14:13:53

6

由于现在$this->getRequest()方法已经过时,你需要将Request对象注入到您的控制器中,如下所示:

public function someAction(Request $request) 

之后,您可以使用以下任一项。

如果你想下,从要求使用获取POST数据:

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

,但如果你想获取得到要求使用的数据是:

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

试试这个,它的工作原理

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

Regards

+0

根本不回答这个问题。提问的人已经可以访问请求对象。 – 2014-12-05 18:54:33

+1

@LaytonEverson对不起,但你错了,他的方法// $ this-> getRequest()从2.4开始被弃用,这就是为什么它不工作,所以他没有真正访问请求对象;) – AchrafSoltani 2014-12-06 23:12:09

+0

虽然你不是关于这个错误,asker想知道什么方法从请求对象中检索变量。 @Cerad正确回答了这个问题。他不仅提供了访问Request对象的正确方法,还回答了问题。 – 2014-12-08 16:15:01

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

这仍然是没有'Request'参数的函数的路吗? (例如,在控制器类的私有函数中)例如 – fritzmg 2016-11-28 08:50:07

6

您的选择:

  1. 简单:
    • $request->request->get('param')$_POST['param'])或
    • $request->query->get('param')$_GET['param']
  2. 好Symfony的所有验证,价值transormation和表格形式带有错误和许多其他功能的渲染:
  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

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

尽管此代码可能回答此问题,但最好包含一些上下文,说明它是如何工作的以及何时使用它。从长远来看,仅有代码的答案是没有用的。 – Bono 2016-04-28 12:17:48

3

你能做到这一点:

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

有时,当属性的保护,你不能访问以获取接入的常用方法的价值:

(POST)

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

(GET)

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

(GENERIC)

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

欢迎来到Stack Overflow。请格式化您的答案,以便下次更易读,并查看以下帮助页面:[answer] – 2017-04-20 14:40:21

1

大多数情况下都覆盖上面的答案。

在发送行数据的情况下(例如,处理由远程服务使用HTTP POST方法发送到应用程序的JSON字符串。)的getContent()可用于:在Symfony的http请求

$content = $request->getContent(); 

其它有用的信息可以在这里找到:https://symfony.com/doc/2.8/components/http_foundation.html