2010-03-09 111 views
0

我正在使用XML配置文件來使用Zend_Navigation填充我的導航。如何在用戶使用Zend_Navigation登錄後交換登錄以進行註銷?

我有登錄和註銷的導航,但顯然我應該只顯示1有道理的行動。

我相信我可以做一些像$ navigation-> removePage()但是...如何在Controller中創建Bootstrap.php之後獲得$ navigation變量?

+2

也許你可以使用ACL的授予「客人」訪問登錄的資源,和「用戶」訪問註銷資源? – gnarf 2010-03-09 02:53:42

+0

聽起來很棒。你能分享代碼來完成這個嗎? – jwhat 2010-03-09 16:44:10

回答

2

最簡單的方法是創建ACL與登錄和未登錄用戶apropriate的privilages,然後在配置文件:

resources.navigation.pages.login.resource = "user" 
resources.navigation.pages.login.privilege = "login" 

(這是爲了簡單起見,INI格式,可能在XML做到這一點以及)

的privilages將限制指定組顯示的登錄/註銷鏈接。

但是... 這對靜態導航標籤很有用。 我想要登錄鏈接名爲:Login,並註銷名爲:Logout (+ username),所以用戶始終看到他的身份。

在這種情況下,我會創建一個前端控制器插件,用於檢索實際的導航容器,查找登錄頁面容器並替換標籤和路由(如果使用MVC頁面容器,則取代URI或模塊,控制器和動作)。

更新時間:

嘗試是這樣的:

if (Zend_Auth::getInstance()->hasIdentity()) { 
    Zend_Registry::set('role', 
    Zend_Auth::getInstance()->getStorage()->read()->role); 
} else { 
    Zend_Registry::set('role', 'guest'); 
} 

$this->_acl = new My_Model::Acl; 
$this->_auth = Zend_Auth::getInstance(); 

$front = Zend_Controller_Front::getInstance(); 
$front->registerPlugin(new Plugin_AccessCheck($this->_acl)); 

$view->navigation()->setAcl($this->_acl)->setRole(Zend_Registry:get('role')); 
+0

我添加了用戶註銷到navigation.xml配置文件,但我不知道如何將其餘的這些聯繫在一起。 我有我的Zend_Acl代碼在init()方法的IndexController.php(甚至不知道如果這是適當的地方)。你能分享完成這個所需的代碼嗎? – jwhat 2010-03-09 16:59:49

+0

- 編輯我的原始文章 - – takeshin 2010-03-09 20:16:05

+0

完美!我將該代碼放入Bootstrap的一個_initAcl()方法中,在那裏我相應地配置了我的addRole(),addResource(),allow()和deny()。謝謝! – jwhat 2010-03-09 22:18:42

0

如果使用Zend_Application,設置Zend_Navigation作爲資源(見關於如何設置你的網頁在配置文件中的鏈接)

http://framework.zend.com/manual/en/zend.application.available-resources.html

然後你就可以像一個控制器訪問導航資源所以:

class FooController extends Zend_Controller_Action 
    { 
     public function init() 
     { 
      $bootstrap = $this->getInvokeArg('bootstrap'); 
      $navigation = $bootstrap->getResource('navigation'); 
      // ... 
     } 
    } 
+0

我能從$ this-> view-> Navigation()獲得我的IndexController中的導航。 ...但我仍然不確定如何正確地將登錄和註銷操作與Zend_Acl相關聯,以便首先只有登錄可用,然後只有用戶登錄後纔可以使用註銷。 – jwhat 2010-03-09 17:03:03