我让用户在通过社交媒体登录时自动生成。我没有收到他们的电子邮件,所以我想知道当他们降落在/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());
}
}
});
答案 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);
}
}
});