2012-03-20 65 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

相關問題