2016-01-08 68 views
3

我必須在將網站遷移到symfony時重用一些HTML代碼。目前的HTML頁面有一個形式:Symfony:獲取現有表單參考

<form name="n1" id="n1" method="post" onsubmit="return verifSelect()" action="{{path('toto')}}" > 

    <select> 
     {% for e in experimentations %} 
     <option>{{e.name}}</option> 
     {% endfor %} 
    </select> 

</form> 

我想通過選擇到toto頁面Experimentation對象(不僅是名稱)。 The symfony doc uses something like

if ($form->isSubmitted() && $form->isValid()) { 
     // ... perform some action, such as saving the task to the database 

     return $this->redirectToRoute('task_success'); 
} 

但我有兩個問題與:

  • 我怎樣才能獲得form對象的引用?
  • 如何獲取所選的experimentation對象引用(以便我可以將它作爲參數發送到下一個路由)?

非常感謝你的幫助,

+0

在請求無法發送的對象。至少你不應該 – pabgaran

+0

然後我可以發送實驗ID,所以我可以稍後檢索完整的對象。但是,這個ID將在HTML頁面中可見,我將不得不執行另一個SQL請求。那也不危險嗎? – DavidL

回答

0

我不知道我的理解以及你的問題,但我會盡量給你答案:

  • 你可以得到表單數據的通過在你的控制器中使用$ form-> getData()。
  • 您無法將完整對象作爲參數傳遞給下一條路徑。

你可以做這樣的事情:

$data = $form->getData(); 
return $this->redirectToRoute('task_success',array('experimentation'=> $data['experimentation'); 

那麼你就可以得到你totoAction的實驗ID。

我希望它能幫助你。

+1

如果你不想發送身份證,你也可以使用slu or或類似的東西。 – Xnack

+0

'$ form'從哪裏來?主要問題是我沒有以symfony的方式創建表單(這是一個靜態HTML表單),所以我沒有'$ form'變量。或者我錯過了什麼? – DavidL

+0

好,所以你沒有$ form var,使用$ request-> get('experimentation')。 – Xnack

0

首先你必須給你的選擇標籤一個名字,以便你可以參考它name="experimentations"。您還需要一個提交按鈕,我想你有<input type="submit" value="submit"/>

<form name="n1" id="n1" method="post" onsubmit="return verifSelect()" action="{{path('toto')}}" > 

    <select name="experimentations"> 
     {% for e in experimentations %} 
     <option>{{e.name}}</option> 
     {% endfor %} 
    </select> 
    <input type="submit" value="submit"/> 

</form> 

要獲得控制器類信息使用$request -object。 功能

class DefaultController extends Controller { 
    /** 
    * 
    * Matches /todo/ 
    * 
    * @Route("/todo/", name="Todo") 
    */ 
    public function indexAction(Request $request) { 
     $experimentations = $request->request->get("experimentations"); 
     ... 
    } 

據我知道你不能在這種情況下使用的表單對象,但人們可能會糾正我......