首页 > 解决方案 > 控制器中的 Symfony 3.4 $_SESSION

问题描述

我有一个在.php文件中启动的应用程序。在这个文件中我做了一些工作,但最后我做了两件事,我生成一个值并保存$_SESSION并重定向到其他路由:

php文件不在 Symfony 文件夹中:

<?php
session_start();

...Do some work

$_SESSION['token'] = 'some value';
header ("Location: new direction");
?>

重定向,重定向到 symfony 文件夹,并启动 symfony 部分到我的src/AppBundle/Controller/MainController.

在此控制器中处理的第一个操作中,我需要访问 的值$_SESSION['token']以在控制器操作中使用此值进行一些工作。这是控制器:

<?php

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;

class MainController extends Controller
{
    public function homepageAction(Request $request)
    {
        dump($_SESSION);
        die;

        ...Some work
    }
}
?>

dump($_SESSION)表明:

在此处输入图像描述

但我找不到我的$_SESSION['token']

我是否需要使用一些 Symfony 组件来访问控制器内的 PHP $_SESSION 值?

或者我如何$_SESSION['token']在控制器中访问?

标签: phpsymfonysymfony-3.4

解决方案


最好的方法是创建接受令牌参数的路由,在会话中保存令牌参数,并重定向用户。

如果您需要为所有路由复制此行为,请在请求事件上使用侦听器。

编辑:有关我的答案的更多信息

第 1 步:设置您的代币值

第 2 步:重定向到接受令牌参数的 Symfony 路由

第 3 步:根据代币价值应用您自己的逻辑

<?php

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\SessionInterface;


/**
 * @Route("/{token}", defaults={"token"=null})
 */
class MainController extends Controller
{

    public function homepageAction(Request $request, SessionInterface $session, ?string $token)
    {
        if ($token) {
            $session->set('token', $token);
        }

        ...Some work
    }
}

推荐阅读