有没有办法可以在另一个实体中获取 ZfcUser 身份或 user_id?
我一直在看下面的链接,与servicemanager打交道。
https://github.com/ZF-Commons/ZfcUser/wiki/How-to-check-if-the-user-is-logged-in#service-manager
使用服务管理器时,我得到以下信息:
在非对象上调用成员函数 get()
在以下行:
$auth = $sm->get('zfcuser_auth_service');
使用服务管理器
public class CustomEntity implements ServiceManagerAwareInterface
{
protected $sm;
/**
* @ORM\Column(type="integer", nullable=false)
*/
protected $creator_id;
/**
*
* @ORM\Column(type="datetime", nullable=false)
*/
protected $creation_date;
/**
* @ORM\Column(type="integer", nullable=true)
*/
protected $last_modifier_id;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
protected $last_modified_date;
public function setServiceManager(ServiceManager $serviceManager)
{
$this->sm = $serviceManager;
return $this->sm;
}
public function getLoggedUserId()
{
$auth = $this->getServiceManager()->get('zfcuser_auth_service');
return $auth->getIdenty()->getId();
}
/**
* @ORM\PrePersist
*/
public function onPrePersist()
{
//$this->creator_id = $this->getLoggedUserId();
$this->creation_date = new \DateTime('now');
}
/**
* @ORM\PreUpdate
*/
public function onUpdate()
{
//$this->last_modifier_id = $this->getLoggedUserId();
$this->last_modified_date = new \DateTime('now');
}
在上面的代码中,我一直在尝试使用 ServiceManager,但没有任何运气。正如我所说,此时它出错了:
在非对象上调用成员函数 get()
在以下行:
$auth = $this->getServiceManager()->get('zfcuser_auth_service');
以及 ServiceManager 接口没有 Get 方法来检索 ServiceManager。所以在那种情况下,我也尝试使用 ServiceLocator 而不是 Manager,但也没有任何运气。
旧版
通过在实体中创建 set 方法,我已经能够使用控制器设置 User_id。
控制器:
public function addAction()
{
...
$customEntity->setCreator($this->zfcUserAuthentication()->getIdentity()->getId());
$this->getEntityManager()->persist($customEntity);
$this->getEntityManager()->flush();
...
}
实体:
public function setCreator($user_id){
$this->creator_id = $user_id;
$this->creation_date = new \DateTime;
}
public function setModifier($user_id){
$this->last_modifier_id = $user_id;
$this->last_modified_date = new \DateTime;
}
新版本
无需在每次执行操作时都设置 setCreator 或 setModifier,在 Doctrine Persist 或 Update 处获取用户身份会很可爱。
我想在我的实体中包含 zfcUser_id。一些代码示例向您展示我所说的:
/**
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
*/
class CustomEntity
{
/**
* @ORM\Column(type="integer", nullable=false)
*/
protected $creator_id;
/**
*
* @ORM\Column(type="datetime", nullable=false)
*/
protected $creation_date;
...
/**
* @ORM\PrePersist
*/
public function onPrePersist()
{
$this->creator_id = ZfcUser_id
$this->creation_date = new \DateTime('now');
}
/**
* @ORM\PreUpdate
*/
public function onUpdate()
{
$this->last_modifier_id = ZfcUser_id
$this->last_modified_date = new \DateTime('now');
}
如您所见,我希望在以下函数中有 ZfcUser_id:onPrePersist 和 onUpdate 以保存此实体/对象的创建者或更新者。对于这个版本,我正在寻找一种获取 ZfcUser 身份的方法,并找到了这个链接:
https://github.com/ZF-Commons/ZfcUser/wiki/How-to-check-if-the-user-is-logged-in#service-manager
结果基于回复
创建您的实体,为您的字段/属性创建一些设置方法。让您的控制器处理这部分。对于将日期(时间)设置为默认值,您可以使用 onPrePresist、onUpdate 或者您应该查看其他 Doctrine Block Annotations。