有没有办法从 Symfony2 AppKernel.php 中找出当前用户名?

Is there any way to find out the current username from the Symfony2 AppKernel.php?

首先,我不在乎这个问题是如何解决的,我很乐意找到一个解决方案。

我需要创建一个允许用户动态 activate/deactivate 捆绑包的应用程序。

为了让它更容易,也为了让自己免于头痛,我不会使用 Doctrine,但将文件保存到用户目录中 dir:/users/{username}/activated_bdls.ini 并循环遍历文件 从 AppKernel.php 相应地激活捆绑包。

这就像根据配置文件将新目录推入 bundle 数组一样简单:

$bundles[] = new Acme\Bundle\DemoBundle\DemoBundle();

目前循环的文件有一个硬编码的路径 dir:/users/{hardcoded_username}/activated_bdls.ini,需要替换为当前用户名。

我试过使用这个,但没有用,但可能会给你一个想法。

$current_username = new \Gabriel\LayoutBundle\Controller\profileController; 
$current_username = $current_username->getCurrentUsernameAction();

Certainly I can't see why you'd ever want the bundles different on a per-request basis.

也许为了避免麻烦,您可以在控制器范围内(某些 index/landingpage 或更好的 login_check)将用户名写入文件,例如 /users/currentuser

并且在您的 AppKernel 中您可以阅读此文件,某事。喜欢:

class AppKernel extends Kernel {

    private $currentUser;

    public function __construct($environment, $debug) {
        parent::__construct($environment, $debug);
        $this->currentUser = trim(file_get_contents(__DIR__ . '/../users/currentuser'));

    }

每次用户重新加载页面时,Appkernel 都会重新加载,
所以用户登录后,设置当前用户session变量

// logincontroller
$_SESSION['username'] = $this->getUser()->getUsername();

//由于页面在登录时重新加载,您可以从 AppKernel 访问它

session_start();
if(isset($_SESSION['username']))
{
    $username = $_SESSION['username'];
    read_stuff_from = ':dir/'.$username.'/file'
    for(loop_through_logic)
    {
       doStuff()
    }
}

我不会把这个问题设置为最好的,以防你想出一个不那么肮脏的解决方案