2011-08-08 34 views
15

tôi sử dụng embedded controller để render hình thức được sử dụng trên nhiều trang:Redirect từ bộ điều khiển nhúng

Twig

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

khiển

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())); 
} 

tôi cần phải chuyển hướng trở về trang chủ sau khi biểu mẫu được gửi thành công như một phần của post-redirect-get mẫu thiết kế. Nếu tôi sử dụng nó như tôi đã mô tả ở trên, tôi sẽ nhận được ngoại lệ như phản ứng từ bộ điều khiển nhúng là 302 thay vì 200 (ít nhất tôi mong đợi nó hoạt động như thế này).

Có thể chuyển hướng bình thường trong trường hợp như vậy không? Hay tôi đang tiếp cận tình huống (với hình thức được hiển thị trên nhiều trang) từ góc độ hoàn toàn sai?

+0

Hey Ondrej bạn đã bao giờ quản lý để tìm một cách rõ ràng để đạt được điều này (hoặc câu hỏi khác của bạn về hình thức tái sử dụng trên một trang khác)? Tôi chỉ tò mò vì tôi phải đối mặt chính xác cùng một vấn đề. Dường như nó có thể là một vấn đề phổ biến nếu bạn có một hình thức tìm kiếm toàn trang web hoặc một số như vậy. Cách duy nhất tôi có thể nghĩ đến là bằng cách đăng trực tiếp lên route someFormAction và sau đó sử dụng một chuyển hướng quay lại URL gốc và lưu trữ các biến biểu mẫu trong phiên ... dường như một chút bẩn. – Kasheen

+0

Dường như nó hoạt động như dự định như thế này. Tôi đang sử dụng kỹ thuật tương tự như bạn đã mô tả. Tôi đã thực hiện một số nghiên cứu sâu hơn và bạn thậm chí không thể truy cập vào phạm vi gốc từ bên trong hành động được nhúng. Điều đó sẽ giúp ích rất nhiều. –

+0

Ok cảm ơn. Tôi đã nghĩ rằng việc sử dụng phiên có thể là cách để đi - nếu bạn nhìn vào xác thực mẫu đăng nhập sẵn có, nó sẽ giống nhau (lưu trữ tên người dùng và mật khẩu trong phiên) và sau đó chuyển hướng đến một số URL trong cấu hình hoặc thông qua lĩnh vực ẩn (tôi nghĩ). Nó sẽ sạch hơn rất nhiều nếu một hành động nhúng có thể chuyển hướng bằng cách POST đến tuyến hành động cha mẹ, xấu hổ nó không hoạt động mặc dù. Cảm ơn đã giúp đỡ. :) – Kasheen

Trả lời

0

Có thể điều này sẽ giúp bạn. Tôi sử dụng điều này để hiển thị các trang 404 nếu tài nguyên không được tìm thấy trong bộ điều khiển nhúng.

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; 
} 

Bạn có thể tạo RedirectHttpException, dữ liệu này sẽ giữ dữ liệu chuyển hướng của bạn và ném vào bộ điều khiển nhúng của bạn. Sau đó chuyển hướng trong bộ điều khiển cha của bạn.

Các vấn đề liên quan