在Symfony 2.8/3.0中,使用我们精美的新安全组件,如何在不注入整个容器的情况下获取服务中当前记录的User(即FOSUser)对象?
它甚至可能以非黑客的方式存在吗?
PS:让我们不要将" 将其作为参数传递给服务函数 ",因为这很简单.还有,很脏.
当我注册一个新的质粒实体时,我想给他一个自动名称(如:p0001,p0002,p0003),为此,我需要在数据库中选择特定用户的最后一个质粒实体,获取其autoName,以及使用此以前的名称来定义新名称.
但是,当我在我的监听器中注入token_storage时,令牌为空...在控制器中,我可以拥有用户,这是有效的.
service.yml
app.event_listener.plasmid:
class: AppBundle\EventListener\PlasmidListener
arguments: ["@security.token_storage"]
tags:
- { name: doctrine.event_listener, event: prePersist }
Run Code Online (Sandbox Code Playgroud)
并且,PlasmidListener
class PlasmidListener
{
private $user;
public function __construct(TokenStorage $tokenStorage)
{
$this->user = $tokenStorage->getToken()->getUser();
}
public function prePersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
// If the entity is not a Plasmid, return
if (!$entity instanceof Plasmid) {
return;
}
// Else, we have a Plasmid, get the entity manager
$em = $args->getEntityManager();
// Get the last plasmid Name
$lastPlasmid = $em->getRepository('AppBundle:Plasmid')->findLastPlasmid($this->user);
// Do something …Run Code Online (Sandbox Code Playgroud)