我正在使用XML配置文件使用Zend_Navigation填充我的导航。
我在导航中有登录和退出,但显然我应该只显示有意义的1动作。
我相信我可以做类似$ navigation-> removePage()的事情,但是...如何在以前在Bootstrap.php中创建后在Controller中获取$ navigation变量?
答案 0 :(得分:2)
最简单的方法是为已登录和未登录的用户创建具有适当特权的ACL,然后在配置文件中创建:
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'));
答案 1 :(得分: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');
// ...
}
}