Перенаправление с встроенного контроллера

Я использую встроенный контроллер для отображения формы, используемой на нескольких страницах:

Twig

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

Мне нужно перенаправить на главную страницу после того, как форма была успешно отправлена ​​в виде post-redirect-get шаблона дизайна. Если я использую его, как описано выше, я получу исключение, так как ответ от встроенного контроллера был 302 вместо 200 (по крайней мере, я ожидаю, что он работает так).

Возможно ли перенаправление в таком случае? Или я подхожу к ситуации (с формой, отображаемой на нескольких страницах) из абсолютно неправильного угла?

Ответы

Ответ 2

Возможно, это поможет вам. Я использую это, чтобы показать 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, который сохранит ваши данные перенаправления и выбросит его во встроенный контроллер. Затем перенаправляйте в родительский контроллер.