2011-08-08 112 views
15

我用embedded controller來呈現對多個頁面使用的形式:重定向從嵌入式控制器

嫩枝

{% render 'Bundle:Controller:someForm' %} 

控制器

public function someFormAction() 
{ 
    // Some logic 

    ... 

    if ($form->isValid()) { 

     ... 

     $this->get('session')->setFlash('successful', "Woey!"); 

     return $this->redirect($this->generateUrl('homepage')); 
    } 

    return $this->render('Bundle:Template:form.html.twig', array('form' => $form->createView())); 
} 

我要回重定向到主頁表格成功提交後作爲的一部分設計模式。如果我按照上面的描述使用它,我會得到異常,因爲嵌入式控制器的響應是302而不是200(至少我期望它可以像這樣工作)。

在這種情況下可以正常重定向嗎?或者,我是否從完全錯誤的角度處理了這種情況(在多頁上呈現的表單)?

+0

Hey Ondrej你有沒有設法找到一個乾淨的方式來實現這個(或另一個頁面上的形式重用的其他問題)?我只是好奇,因爲我面臨完全相同的問題。似乎這可能是一個常見問題,如果你有一個網站的搜索表單或其他一些。我唯一能想到的方式是直接發佈到someFormAction路由,然後使用重定向回到原始URL並將表單變量存儲在會話中......雖然看起來很髒。 – Kasheen

+0

它看起來像這樣打算工作。我正在使用與您所描述的相同的技巧。我做了一些進一步的研究,甚至無法從嵌入式操作中訪問父範圍。這會有很大的幫助。 –

+0

好的,謝謝。我曾認爲使用會話可能是一條路 - 如果您查看內置的登錄表單身份驗證,它會執行相同的操作(將會話中的用戶名和密碼字段存儲起來),然後重定向到某個URL或者通過配置或通過隱藏的領域(我認爲)。如果嵌入式操作可以通過發送到父級操作路由來重定向,那麼它會更加清潔,儘管如此,它仍然無法工作。謝謝您的幫助。 :) – Kasheen

回答

0

也許這會幫助你。如果在嵌入式控制器中找不到資源,我使用它顯示404頁。

try 
{ 
    return $this->render('MyBundle:Table:list.html.twig', $data); 
} 
catch(\Twig_Error_Runtime $e) 
{ 
    if($e->getPrevious() instanceof NotFoundHttpException) 
    { 
     throw $this->createNotFoundException(); 
    } 
    else throw $e; 
} 

你可以做一個RedirectHttpException,將舉行您重定向數據,並在您的嵌入式控制器扔了吧。然後在您的父控制器中重定向。