2013-10-10 73 views
0

我有一個表單,我想在我的網站的幾個頁面中使用。 所以我呼籲這樣的方法在我的網頁:Symfony2呈現和表單

{{ render(controller('ProjectApplicationBundle:Application:form')) }} 

我有我的formAction方法:

public function formAction() 
{ 
    $form = $this->createForm($type,$obj); 

    if('POST' == $this->getRequest()->getMethod()){ 
     $form->submit($this->getRequest()); 
     if($form->isValid()){ 
      //redirect to a page after the form 
     } 
    } 
    //render the form template ... 
} 

這不是我的代碼,這只是一個例子。

所以我加入到創建一個路由送我的形式

project_application_form: 
    pattern: /form 
    defaults: { _controller: ProjectApplicationBundle:Application:form } 

現在我的問題:)

1)我想使用的URL阻止訪問我的形式,只允許進行數據處理。

2)如果錯誤的頁面不重定向,所以窗體顯示沒有佈局,所以我想在窗體的頁面中顯示錯誤的形式。

編輯:我可能有第二點的解決方案,但這不是很合適。 在我的參數中設置渲染路線並返回到路線而不是呈現渲染窗體。最後,我使用會話來輸入錯誤。

我希望這對你很清楚,對不起我的英語。

+0

你是什麼意思通過阻止訪問表單並只允許數據處理?您是否想讓路由僅可用於POST請求? – nifr

+0

好像你必須在你需要的所有控制器動作中使用你的formtype – sergekv

回答

1

你必須保證,你處理你的表單的動作,並使其可僅由POST

例子:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; 

class RegisterController extends Controller 
{ 
    /** 
    * @Route("/register/process", name="process_form_register") 
    * @Method({"POST"}) 
    */ 
    public function processAction(Request $request) 
    { 
     $form = $this->createFrom(new RegisterType()); 
     $form->submit($request); 

     if($form->isValid()){ 
      //redirect to a page after the form 
     } 
    } 
} 

如果使用yml語法的路線,這會是:

process_form_register: 
    pattern: /register/process 
    defaults: { _controller: ...... } 
    requirements: 
     _method: POST 

爲你的2)點打開一個新問題,因爲每個線程只有一個問題,它是另一個問題

+0

謝謝,我會打開一個新的問題2 – Ajouve

+0

我很好奇第二部分:http://stackoverflow.com/questions/19896639 /渲染控制器和獲取 - 成型 - 錯誤 - 從孩子 –