gpt4 book ai didi

php - 在 Symfony 的 kernel.request 或 kernel.request 事件中获取当前用户

转载 作者:行者123 更新时间:2023-12-04 00:10:49 29 4
gpt4 key购买 nike

我有一个服务,我在其中注入(inject) TokenStorage 并想要获取当前用户。

/**
*
* @Service("liip_theme.theme_request_listener")
* @Tag("kernel.event_listener", attributes={ "event"="kernel.request", "method"="onKernelRequest" })
*/
class ThemeRequestListener
{
private $sam;

/**
* @InjectParams({
* "sam" = @Inject("security.token_storage")
* })
*/
public function __construct(TokenStorage $sam)
{

$this->sam = $sam;
}

/**
* @param GetResponseEvent $event
*/
public function onKernelRequest(GetResponseEvent $event)
{
$a = $this->sam->getToken()->getUser();
}
}

但是我得到了

Error: Call to a member function getUser() on null

当我 var_dump($a) 时我没有得到这个,但是当我正常运行网站时它崩溃并出现这个错误。我还删除了缓存并重新启动了 apache。我也确定我已登录。Var_dump()-ing 它可以工作并检索当前用户,但如果不转储它,网站就会崩溃。

环顾四周,我发现它可能与监听器优先级有关,但我添加了:

* @Tag("kernel.event_listener", attributes={ "event"="kernel.request", "method"="onKernelRequest","priority"=0 })

然后将 0 更改为 -1、-255、255、1,没有任何反应。

是我做错了什么还是 JMSDIExtraBundle 的错?

我也是这样定义的:

liip_theme.theme_request_listener:
class: Application\Liip\ThemeBundle\EventListener\ThemeRequestListener
arguments: [ @security.token_storage ]
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 0 }

所以它不是来自 JMSDI。

另一件事,它只在 DEV 环境中崩溃。我收到一个带有警报的 Symfony 工具栏崩溃。在 PROD 中它工作正常。但我还是想解决它。

它不可能是另一个包,因为我已经尝试过一个全新的 2.8.3 项目,除了标准包之外没有供应商包,只有这个监听器并得到同样的错误。

打开了一个 GitHub 问题 here .

最佳答案

$token = $this->sam->getToken();
$a = $token ? $token->getUser() : null;

TokenStorage::getToken 可以返回 null。

关于php - 在 Symfony 的 kernel.request 或 kernel.request 事件中获取当前用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35862824/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com