1

有没有办法可以在另一个实体中获取 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。

4

0 回答 0