2013-12-10 97 views
0

如果用戶被鎖定,我如何顯示或隱藏登錄/註銷鏈接。是否應該直接在視圖中完成此操作?如果用戶登錄,在Zend2中顯示隱藏登錄/註銷

在我onDispatch我看到它是用$this->getAdminAuthService()->hasIdentity()檢查,如果用戶在loged。

如何使用它,鑑於這樣的嗎?

if($this->getAdminAuthService()->hasIdentity()){ 
    echo "<a href="#">login</a>"; 
} 
else { 
    echo "<a href="#">Logout</a>" 
} 
+0

我想你應該設置'$這個 - > getAdminAuthService() - > hasIdentity()'到在控制器中的變量,並通過它來查看。 –

+0

如何做到這一點,因爲我沒有一個特別的頭部動作,而是頭部被包含在onDispatch中,就像這個公共函數onDispatch(\ Zend \ Mvc \ MvcEvent $ e){header = new ViewModel(); $ header-> setTemplate('layout/header'); $ this-> layout() - > addChild($ header,'header'); – user2406735

+0

getAdminAuthService方法在哪裏? –

回答

1

在你的控制器試試這個:

public function onDispatch(\Zend\Mvc\MvcEvent $e) 
{  
    $header = new ViewModel(array('login'=>$this->getAdminAuthService()->hasIdentity())); 
    $header->setTemplate('layout/header'); 
    $this->layout()->addChild($header, 'header'); 
} 

則:

//layout/header.phtml 
if($this->login){ 
    echo "<a href="#">login</a>"; 
} else { 
    echo "<a href="#">Logout</a>" 
} 
+0

謝謝,這是有效的。這是做這種事情的最好方式,還是應該以不同的方式做? – user2406735

+0

不客氣。我認爲這是最好的方式; –

1

一個view helper可能是這個

namespace MyModule\View\Helper; 

use Zend\View\Helper\AbstractHelper; 
use MyModule\Service\AuthService; 

class IsAuthenticated extends AbstractHelper 
{ 
    protected $authService; 

    public function __construct(AuthService $authService) { 
    $this->authService = $authService; 
    } 

    public function __invoke() 
    { 
    return $this->authService->hasIdentity(); 
    } 

} 

更自包含的解決方案創建一個工廠在你的module.php

public function getViewHelperConfig() 
{ 
    return array(
    'factories' => array(
    'IsAuthenticated' => factory($sl) { 
     $authService = $sl->getServiceLocator()->get('AuthService'); 
     return new View\Helper\IsAuthenticated($authService); 
    }, 
    ), 
); 
} 

然後你就可以在視圖或佈局內使用 - 也許部分

if ($this->isAuthenticated()) { 
    // render the login/logout 
    $this->partial('some/view/file', array('foo', 'bar')); 
} 

視圖的插件可以擴展到代理到其他AuthService方法。不過,我希望這個簡短的例子說明如何去做。

+0

謝謝你的回答。很高興知道它可以像這樣處理。 – user2406735

1

我不知道你使用的是什麼版本的ZF2,但2.2.x帶有一個視圖幫助器,用於從開箱即用的AuthenticationService中檢查用戶的身份。

$this->identity(); 

View Helper - Identity

+0

感謝這個,很高興知道,但我使用Zend 2.0.6 – user2406735