use*_*506 8 symfony fosuserbundle sonata-admin
我使用sonata-admin包.我在PageEntity中与用户(FOSUserBundle)有关系.我想保存创建或更改页面的当前用户.
我的猜测是获取admin类的postUpdate和postPersist方法中的用户对象,并且此对象在setUser方法中传输.
但是如何实现呢?
在google的小组中,我看到了
public function setSecurityContext($securityContext) {
$this->securityContext = $securityContext;
}
public function getSecurityContext() {
return $this->securityContext;
}
public function prePersist($article) {
$user = $this->getSecurityContext()->getToken()->getUser();
$appunto->setOperatore($user->getUsername());
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用
Bab*_*aga 25
在admin类中,您可以像这样获取当前登录的用户:
$this->getConfigurationPool()->getContainer()->get('security.token_storage')->getToken()->getUser()
Run Code Online (Sandbox Code Playgroud)
编辑基于反馈
你这样做了吗?因为这应该有效.
/**
* {@inheritdoc}
*/
public function prePersist($object)
{
$user = $this->getConfigurationPool()->getContainer()->get('security.token_storage')->getToken()->getUser();
$object->setUser($user);
}
/**
* {@inheritdoc}
*/
public function preUpdate($object)
{
$user = $this->getConfigurationPool()->getContainer()->get('security.token_storage')->getToken()->getUser();
$object->setUser($user);
}
Run Code Online (Sandbox Code Playgroud)
从 symfony 2.8 开始,你应该使用security.token_storage而不是security.context来检索用户。使用构造函数注入在您的管理员中获取它:
public function __construct(
$code,
$class,
$baseControllerName,
TokenStorageInterface $tokenStorage
) {
parent::__construct($code, $class, $baseControllerName);
$this->tokenStorage = $tokenStorage;
}
Run Code Online (Sandbox Code Playgroud)
admin.yml :
arguments:
- ~
- Your\Entity
- ~
- '@security.token_storage'
Run Code Online (Sandbox Code Playgroud)
然后使用$this->tokenStorage->getToken()->getUser()获取当前用户。
| 归档时间: |
|
| 查看次数: |
11244 次 |
| 最近记录: |