如何在用户使用Zend_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