我正在使用XML配置文件來使用Zend_Navigation填充我的導航。如何在用戶使用Zend_Navigation登錄後交換登錄以進行註銷?
我有登錄和註銷的導航,但顯然我應該只顯示1有道理的行動。
我相信我可以做一些像$ navigation-> removePage()但是...如何在Controller中創建Bootstrap.php之後獲得$ navigation變量?
我正在使用XML配置文件來使用Zend_Navigation填充我的導航。如何在用戶使用Zend_Navigation登錄後交換登錄以進行註銷?
我有登錄和註銷的導航,但顯然我應該只顯示1有道理的行動。
我相信我可以做一些像$ navigation-> removePage()但是...如何在Controller中創建Bootstrap.php之後獲得$ navigation變量?
最簡單的方法是創建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'));
我添加了
- 編輯我的原始文章 - – takeshin 2010-03-09 20:16:05
完美!我將該代碼放入Bootstrap的一個_initAcl()方法中,在那裏我相應地配置了我的addRole(),addResource(),allow()和deny()。謝謝! – jwhat 2010-03-09 22:18:42
如果使用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');
// ...
}
}
我能從$ this-> view-> Navigation()獲得我的IndexController中的導航。 ...但我仍然不確定如何正確地將登錄和註銷操作與Zend_Acl相關聯,以便首先只有登錄可用,然後只有用戶登錄後纔可以使用註銷。 – jwhat 2010-03-09 17:03:03
也許你可以使用ACL的授予「客人」訪問登錄的資源,和「用戶」訪問註銷資源? – gnarf 2010-03-09 02:53:42
聽起來很棒。你能分享代碼來完成這個嗎? – jwhat 2010-03-09 16:44:10