Перенаправление со встроенного контроллера - PullRequest
15 голосов
/ 08 августа 2011

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

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 ]

9 голосов
/ 29 января 2012

Просто чтобы сделать это официальным ответом, Фабьен не думает, что Symfony2 когда-либо будет поддерживать эту функцию .

0 голосов
/ 10 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...