2013-02-15 49 views
3

我使用Zend\Authentication\AuthenticationService來管理當前登錄的用戶。現在,我希望默認情況下,實體對象在所有ViewModel中都可用,而無需在每個控制器操作中分配用戶對象。所有ViewModels中的用戶標識

有沒有一種很好的方法來做到這一點?或者我是否需要爲ViewModel創建一個工廠並從中注入用戶的身份?在這種情況下,每次我想創建一個不太性感的ViewModel時,我都必須使用ServiceManager。

有沒有更優雅的方式?我可以以某種方式直接從ViewModel(即模板)中訪問AuthenticationService嗎?

回答

4

通過Ocramius和布拉姆的答案的啓發,我參加了一個更深入地瞭解了ZF視圖助手。和tadaa:事實證明,ZF2已經有一個助手在任何視圖模型中訪問用戶標識。視圖助手簡稱爲identity

爲了使它能夠正常工作,您需要將Zend\Authentication\AuthenticationService添加到可調用類列表中(不知道爲什麼這不是默認值),例如在配置/自動加載/ global.php

return array(
    'service_manager' => array(
     'invokables' => array(
      'Zend\Authentication\AuthenticationService' => 'Zend\Authentication\AuthenticationService', 
     ), 
    ), 
); 

之後,你可以很容易地存取權限從任何模板當前用戶的身份:

<p>Hello <?php echo $this->identity()->getName() ?></p> 

再次感謝特別是對Ocramius讓我在正確的軌道上!如果你不使用Zend \ Authentication \ AuthenticationService,他的答案仍然適用。

+0

'ZfcUser'的auth服務仍然是一個'Zend \ Authentication \ AuthenticationService' btw;) – Ocramius 2013-02-16 02:39:54

0

您應該創建一個視圖幫助器,從認證服務中檢索用戶模型。 查看示例中的ZfcUser view helper。 也許你可以使用ZfcUser模塊作爲你的用例。

2

看看ZfcUser是怎麼做到的。它不是在所有視圖中注入身份變量,而是允許view helper訪問身份驗證服務。

爲此,認證服務被注入到視圖助手through a service factory中。

這基本上可以讓你使用像在任何視圖腳本的以下內容:

echo $user = $this->zfcUserIdentity(); 

echo $user ? $user->getUsername() : 'Not logged in!'; 
相關問題