2

我如何从 zfcUser 获取状态

在 view/index.phtml 我从 $this->zfcUserIdentity()->getState();

但现在我需要在其他模块/控制器(这是我的成本模块控制器)中获取这个值(这个用户的状态)

所以我需要从以下位置获取状态:zfcUser/Entity/User 到 myModule/Controller

我看这个https://github.com/ZF-Commons/ZfcUser/wiki/How-to-check-if-the-user-is-logged-in但这个解决方案没有帮助

4

3 回答 3

7

这对我也有帮助:

$sm = $this->getServiceLocator();
$auth = $sm->get('zfcuserauthservice');
if ($auth->hasIdentity()) {
    $user_edit = $auth->getIdentity()->getPrem();
}
于 2012-12-26T11:07:00.710 回答
1

state是来自用户本身的属性。因此,如果您通过识别服务获取用户,则可以从那里获取状态。

public function myFooAction()
{
    if ($this->zfcUserAuthentication()->hasIdentity()) {
        $user  = $this->zfcUserAuthentication()->getIdentity();
        $state = $user->getState();
    }
}

请注意,当用户未登录时,if条件为假。状态也可以是null任意值,所以不要期望每个用户都返回一个有效的状态(换句话说,检查返回的值!)

于 2012-12-24T09:16:12.830 回答
1

按照此代码,我遇到了同样的问题,然后我管理了如何通过 zfcUser 使用登录用户的身份

在顶部的其他模块控制器中,

  use Zend\EventManager\EventManagerInterface;

然后在同一个类中创建这两个函数,

public function setEventManager(EventManagerInterface $events)
{
     parent::setEventManager($events);

    $controller = $this;
    $events->attach('dispatch', function ($e) use ($controller) {

        if (is_callable(array($controller, 'checkUserIdentity')))
        {
            call_user_func(array($controller, 'checkUserIdentity'));
        }
    }, 100);
}

public function checkUserIdentity()
{

    if ($this->zfcUserAuthentication()->hasIdentity()) {
    echo "<pre>"; print_r($this->zfcUserAuthentication()->getIdentity());die;

        }

}

它会给出这种输出

Admin\Entity\User Object
(
[id:protected] => 2
[username:protected] => 
[email:protected] => rajat.modi@softwebsolutions.com
[displayName:protected] => 
[password:protected] => $2y$14$2WxYLE0DV0mH7txIRm7GkeVJB3mhD4FmnHmxmrkOXtUFL7S9PqWy6
[state:protected] => 
)

就是这样,无论用户是否登录,您都将自动获取身份,否则它将重定向到登录页面。

希望这会有所帮助

于 2012-12-24T06:52:19.650 回答