如何在不声明任何变量的情况下访问symfony会话?(Symfony组件与遗留代码用例交互)



假设我有一行,不在任何地方的类中,并且我知道会话有一个名为"foo"的变量,我想输出它。

在标准PHP中,我可以简单地...

echo $_SESSION["foo"];

那么我需要做什么才能等效使用symfony会话呢? 我不在一个函数中,不在类中,没有将任何变量从 A 点传递到 B 点,没有$request变量,没有$session。我只想从会话中输出"foo"。我该怎么做?

这是在一个遗留代码库中,其中包含相当多的程序编写代码。

选项 1:由于您使用的是 PHP,您仍然可以使用$_SESSION超级全局来访问会话变量。

选项2:否则你可以使用Symfony的Session类,文档在这里:https://symfony.com/doc/current/components/http_foundation/sessions.html

选项3:创建一个抽象Symfony会话的帮助程序。在composer.json文件中,在autoload部分添加files定义:

{
"autoload": {
"files": ["src/helpers/SessionsHelper.php"]
} 
}

附言不要忘记composer dump-autoload.

现在,在SessionsHelper中,您可以创建全局可访问的函数:

use SymfonyComponentHttpFoundationSessionSession;
/**
* Retrieve a value from Session
* 
* @param $key [String]
* @return [String]
*/
function getSessionValue($key)
$session = new Session();
return $session->get($key);
}

现在,您可以在代码中的任何位置使用getSessionValue

echo getSessionValue('user_id');

最新更新