如何在Silex / Symfony中进行内部重定向?

时间:2015-08-16 21:59:00

标签: php symfony silex

我让用户在通过社交媒体登录时自动生成。我没有收到他们的电子邮件,所以我想知道当他们降落在/whatever/page/after/login时,他们会看到一个类似“只需输入电子邮件继续播放!”的屏幕。

我看了http://silex.sensiolabs.org/doc/cookbook/sub_requests.html,我要么误读,要么认为我需要在Silex\ControllerProviderInterface内进行。我希望这种行为适用于任何请求。同时,如果我让所有提供者扩展一个,我不确定是否正确地删除了父母的connect而没有篡改所有内容。

我还尝试重新初始化类似答案的所有内容Unable to overwrite pathInfo in a Symfony 2 Request

以下是我正在使用的代码:

$app
->before(function (Request $request) use ($app) {
      $token = $app['security']->getToken();
      $app['user'] = null;

      if ($token && !$app['security.trust_resolver']->isAnonymous($token)) {
          $app['user'] = $token->getUser();


          if (!$app['user']->isVerified()) {
            $request->server->set('REQUEST_URI', '/signup');
            $request->initialize($request->query->all(), $request->request->all(), $request->attributes->all(), $request->cookies->all(), $request->files->all(), $request->server->all(), $request->getContent());
          }
      }
    });

1 个答案:

答案 0 :(得分:1)

我相信你想要做的是创建一个具有正确值的新Request对象,然后告诉该应用程序来处理它。

如果您不关心保留原始请求中的请求参数,那么您可以删除大量额外的内容。

$app
->before(function (Request $request) use ($app) {
      $token = $app['security']->getToken();
      $app['user'] = null;

      if ($token && !$app['security.trust_resolver']->isAnonymous($token)) {
          $app['user'] = $token->getUser();


          if (!$app['user']->isVerified()) {
            $subRequest = Request::create('/signup', 'GET', $request->attributes->all(), $request->cookies->all(), $request->files->all(), $request->server->all(), $request->getContent());
            $subRequest->request = $request->request;
            $subRequest->query = $request->query;
            return $app->handle($subRequest, HttpKernelInterface::SUB_REQUEST);
          }
      }
    });