2010-03-09 94 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