Symfony2:重定向到最后一条路线并闪烁消息?

2022-08-30 11:02:06

当我尝试刷新消息并将用户重定向回Symfony 2中的上一页时,我遇到了一个小问题。

我有一个非常简单的CRUD。当新的或编辑时,我想在各自的创建/更新方法出现问题时闪烁一条消息:

  1. User --GET--> new
  2. new --POST--> create (fails)
  3. --REDIRECT--> new (with flash message)

我正在执行以下操作:

  $this->container->get('session')->setFlash('error', 'myerror');
  $referer = $this->getRequest()->headers->get('referer');   
  return new RedirectResponse($referer);

但是,它不会重定向到正确的引荐来源网址!即使引用站点的值是正确的(例如:),它也会重定向到索引。为什么?http://localhost/demo/2/edit/


答案 1

这是Naitsirch和Santi代码的替代版本。我意识到一个特征非常适合此功能。还对代码进行了一些优化。我更喜欢返回所有参数,包括 slugs,因为在生成路由时可能需要这些参数。

此代码在 PHP 5.4.0 及更高版本上运行。当然,您可以将该特征用于多个控制器。如果将特征放在单独的文件中,请确保将其命名为与特征相同的名称,遵循 PSR-0。

<?php
trait Referer {
    private function getRefererParams() {
        $request = $this->getRequest();
        $referer = $request->headers->get('referer');
        $baseUrl = $request->getBaseUrl();
        $lastPath = substr($referer, strpos($referer, $baseUrl) + strlen($baseUrl));
        return $this->get('router')->getMatcher()->match($lastPath);
    }
}

class MyController extends Controller {
    use Referer;

    public function MyAction() {
        $params = $this->getRefererParams();

        return $this->redirect($this->generateUrl(
            $params['_route'],
            [
                'slug' => $params['slug']
            ]
        ));
    }
}

答案 2

对于symfony 3.0,flash消息重定向回上一页,这可以在控制器中完成。

           $request->getSession()
                ->getFlashBag()
                ->add('notice', 'success');
            $referer = $request->headers->get('referer');
            return $this->redirect($referer);

推荐