奏鸣曲捆绑包,我怎样才能获得当前登录的用户?
Posted
技术标签:
【中文标题】奏鸣曲捆绑包,我怎样才能获得当前登录的用户?【英文标题】:Sonata bundle, how can I get current logged in user? 【发布时间】:2017-10-01 22:05:08 【问题描述】:假设我有一个汽车实体。除了典型的汽车属性,我已经更新了属性
在奏鸣曲中,我使用 AppBundle\Admin\CarAdmin.php 创建了一个 CRUD 管理页面
在 CarAdmin 类中,我有所需的方法,如 configureListFields、configureFormFields 等......
我猜我需要添加 updatedBy 使用方法 prePersist($object) 但我面临 $this->getUser() 不可用
问题是,如何让登录用户填充 updateBy 属性?
【问题讨论】:
【参考方案1】:您可以使用$this->getConfigurationPool()->getContainer()->get('security.context')->getToken()->getUser()
获取登录用户。在您的情况下,您需要执行以下操作:
public function setUpdatedByAttribute($car)
$user = $this->getConfigurationPool()->getContainer()->get('security.context')->getToken()->getUser();
$car->setUpdatedBy($user);
public function prePersist($car)
$this->setUpdatedByAttribute($car);
public function preUpdate($car)
$this->setUpdatedByAttribute($car);
【讨论】:
我有各种实体,有没有办法可以创建控制器并在 CarAdmin.php 中添加控制器?这样我就可以在控制器中完成所有用户操作并返回我需要的内容。 @CookieMonster 你可以做的是创建一个可以填充这些字段的服务。然后有一个您的实体实现的接口。将服务添加到您的管理服务并调用服务中的方法。 好答案!但是使用 Symfony 4 它对我不起作用。我可以通过使用其他服务来获取用户:->get('security.token_storage')
而不是 ->get('security.context')
。
如果 ->get('security.token_storage')->getToken() 在任何变体中返回 null,会发生什么情况? ***.com/questions/63297123/…以上是关于奏鸣曲捆绑包,我怎样才能获得当前登录的用户?的主要内容,如果未能解决你的问题,请参考以下文章