由于Slim中的重定向,Flash消息不会显示

时间:2017-12-01 18:42:44

标签: php slim

我正在开发一个Slim 3应用程序,它使用Slim Flash来显示flash消息。所有正常设置的测试都能正常工作。但是,我在我的应用程序中添加了一个中间件,以便在进入或离开受保护的页面(例如登录或注册)时转换为HTTPS(并返回到HTTP)。

问题是,当我离开注册页面(HTTPS)并重定向到主页(HTTP)时,表示帐户已成功创建的Flash消息永远不会显示。我尝试禁用中间件(因此只在HTTP页面之间工作)并且它有效。

这是我在中间件中使用的代码:

if($request->getUri()->getScheme() === 'https' && !in_array($request->getUri()->getPath(), self::SSL_REQUIRED_PATHS ) ){
$response = $response->withStatus(302)->withHeader('Location', 'http://' . $request->getUri()->getHost() . $request->getUri()->getBasePath() . '/' . $request->getUri()->getPath() );

}

显然,响应状态导致闪存消息丢失。无论如何都要保存Flash消息并在从HTTPS转回HTTP后显示它?

感谢。

1 个答案:

答案 0 :(得分:0)

您可以在中间件重定向中添加flash消息的验证,并将消息保存为下一个请求,如下所示:

if ($request->getUri()->getScheme() === 'https' &&
    !in_array($request->getUri()->getPath(), self::SSL_REQUIRED_PATHS)
    ) {
    $messagesFlash = $app->flash->getMessages();

    if ($messagesFlash) {
        array_map(function($k, $v) use ($app) {
            $app->flash->addMessage($k, $v);
        }, array_keys($messagesFlash), $messagesFlash);
    }

    $location = sprintf('http://%s%s/%s'
        $request->getUri()->getHost(),
        $request->getUri()->getBasePath(),
        $request->getUri()->getPath()
    );

    $response = $response->withStatus(302)->withHeader('Location',  $location);

}

但我建议您在整个网站中使用HTTPS