簡體   English   中英

訪問 Symfony2 請求對象中的 POST 值

[英]Access POST values in Symfony2 request object

好的,這是一個新手問題,但我在任何地方都找不到答案。 在 Symfony2 的控制器中,我想從我的表單之一訪問 POST 值。 在控制器中,我有:

public function indexAction()
{ 
    $request = $this->get('request');
    if ($request->getMethod() == 'POST') {
        $form = $this->get('form.factory')->create(new ContactType());
        $form->bindRequest($request);
        if ($form->isValid()) {
            $name_value = $request->request->get('name');

不幸的是$name_value沒有返回任何東西。 我究竟做錯了什么? 謝謝!

表單發布值存儲在請求中表單的名稱下。 例如,如果您覆蓋了 ContactType() 的getName()方法以返回“contact”,您可以這樣做:

$postData = $request->request->get('contact');
$name_value = $postData['name'];

如果您仍然遇到問題,請嘗試在$request->request->all()上執行var_dump() $request->request->all()以查看所有帖子值。

Symfony 2.2

此解決方案自 2.3 起已棄用,並將在 3.0 中刪除, 請參閱文檔

$form->getData();

給你一個表單參數數組

來自symfony2 書第 162 頁(第 12 章:表格)

[...] 有時,您可能只想使用沒有類的表單,並獲取提交數據的數組。 這實際上非常簡單:

public function contactAction(Request $request) {
  $defaultData = array('message' => 'Type your message here');
  $form = $this->createFormBuilder($defaultData)
  ->add('name', 'text')
  ->add('email', 'email')
  ->add('message', 'textarea')
  ->getForm();
  if ($request->getMethod() == 'POST') {
    $form->bindRequest($request);
    // data is an array with "name", "email", and "message" keys
    $data = $form->getData();
  }
  // ... render the form
}

您還可以直接通過請求對象訪問 POST 值(在本例中為“名稱”),如下所示:

$this->get('request')->request->get('name');

但是,請注意,在大多數情況下,使用 getData() 方法是更好的選擇,因為它在被表單框架轉換后返回數據(通常是一個對象)。

當你想訪問表單令牌時,你必須使用有問題的$postData = $request->request->get('contact');的答案$postData = $request->request->get('contact'); 因為getData()從數組中刪除元素


Symfony 2.3

從 2.3 開始,您應該使用handleRequest而不是bindRequest

 $form->handleRequest($request);

查看文檔

對我有用的是使用這個:

$data = $request->request->all();
$name = $data['form']['name'];

ParameterBag::get()方法有一個技巧。 您可以將$deep參數設置$deep true並在沒有額外變量的情況下訪問所需的深層嵌套值:

$request->request->get('form[some][deep][data]', null, true);

您也可以設置默認值( get()方法的第二個參數),它可以避免冗余isset($form['some']['deep']['data'])調用。

可以在控制器中訪問字段數據:清單 12-34

$form->get('dueDate')->getData();

另外,未映射字段的數據也可以直接修改:示例12-35

$form->get('dueDate')->setData(new \DateTime());

第 164 頁 symfony2 書(生成於 2013 年 10 月 9 日)

我通過以下方式訪問我的多部分發布請求的 ticketNumber 參數。

$data = $request->request->all();
$ticketNumber = $data["ticketNumber"];

我認為為了獲取由表單對象綁定和驗證的請求數據,您必須使用:

$form->getClientData();

Symfony文檔獲取請求數據

最后,可以使用 getContent() 訪問與請求正文一起發送的原始數據:

$content = $request->getContent();

如果你是新手,歡迎來到 Symfony2,一個開源項目,所以如果你想學到很多東西,你可以開源!

來自“Form.php”:

getData() getNormData() getViewData()

您可以在此文件中找到更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM