0

我正在使用 XML 配置文件来使用 Zend_Navigation 填充我的导航。

我在导航中有 Login 和 Logout,但显然我应该只显示 1 个有意义的操作。

我相信我可以执行类似 $navigation->removePage() 的操作,但是...在之前在 Bootstrap.php 中创建 $navigation 变量之后,如何在 Controller 中获取它?

4

2 回答 2

2

最简单的方法是为登录和未登录的用户创建具有适当权限的 ACL,然后在配置文件中:

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

(为简单起见,这是 ini 格式,您也可以在 XML 中执行此操作)

权限将限制显示指定组的登录/注销链接。

但是……这对静态导航标签很有用。我希望登录链接名为: Login,注销名为: Logout (+ username),因此用户始终可以看到他的身份。

在这种情况下,我将创建一个前端控制器插件,它检索实际导航容器、查找登录页面容器并替换标签和路由(或 URI 或模块、控制器和操作,如果您使用 MVC 页面容器)。

更新:

尝试这样的事情:

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'));
于 2010-03-09T08:27:13.310 回答
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');
          // ...
      }
  }
于 2010-03-09T04:22:37.227 回答