Php 数据库驱动导航中的登录/注销链接?

Php 数据库驱动导航中的登录/注销链接?,php,zend-framework,zend-navigation,zend-acl,Php,Zend Framework,Zend Navigation,Zend Acl,我有一个数据库驱动的导航,主要由两个表组成:菜单和一个菜单项,这对于纯“静态”链接很好,但现在我需要一个动态链接(登录/注销) 我的菜单项表只是由指向在管理中手动添加的页面的链接组成。因此,现在我需要调整表和模型,使其能够处理“动态”链接 以下是菜单项表的模式: CREATE TABLE `menu_items` ( `id` int(11) NOT NULL auto_increment, `menu_id` int(11) default NULL, `label` varcha

我有一个数据库驱动的导航,主要由两个表组成:
菜单
和一个
菜单项
,这对于纯“静态”链接很好,但现在我需要一个动态链接(登录/注销)

我的
菜单项
表只是由指向在管理中手动添加的页面的链接组成。因此,现在我需要调整表和模型,使其能够处理“动态”链接

以下是菜单项表的模式:

CREATE TABLE `menu_items` (
  `id` int(11) NOT NULL auto_increment,
  `menu_id` int(11) default NULL,
  `label` varchar(250) default NULL,
  `page_id` int(11) default NULL,
  `link` varchar(250) default NULL,
  `position` int(11) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8
菜单id对应于另一个表,因此1例如是主导航,2可以是实用导航。位置是指相对于菜单项显示的每个菜单的顺序。链接只是一个字段,例如“/user/login”

我正在循环浏览我的每个菜单,创建导航容器,并为此使用Zend Navigation

这是我用于登录区域的逻辑,我需要将其移到动态导航中:

<?php if($this->identity == null) { ?>
    <p><a href='/user/login'>Login</a></p>
<?php }else{ ?>
    <p>Welcome back <?php echo $this->identity->first_name;?></p>
    <p>To log out <a href='/user/logout'>click here</a></p>
<?php } ?>

欢迎回来

注销


看起来我需要为每个菜单项的访问级别添加一个新列,然后更新我的菜单模型以说明用户是否登录,并查询菜单项的新访问列值,或者沿着这些行进行查询。有人有什么建议吗?

我想你可以通过Zend_Acl实现这一点。所有内置导航助手都添加了与ACL和翻译的集成

{get | set}Acl(),{get | set}Role(),
获取/设置ACL(Zend_ACL)实例和 角色(字符串或 Zend_Acl_角色_接口)用于 渲染时过滤掉页面, 和{get | set}UseAcl()控制 应启用ACL。方法 hasAcl()和hasRole()检查 帮助程序具有ACL实例或角色 注册的

如果登录的访问者与未登录的访问者(用户与来宾)具有不同的角色,则应该可以这样做。我以前从来没有这样做的必要,所以我不能给你任何代码片段,但请查看关于如何结合两者的视频教程


我仍然不明白你为什么要重构它,因为移动它似乎是一件麻烦的事,而且会增加一些不必要的复杂性,因为它可以在一个单独的视图助手中愉快地生活。所以,为什么不保持简单:)

我想您可以通过Zend_Acl实现这一点。所有内置导航助手都添加了与ACL和翻译的集成

{get | set}Acl(),{get | set}Role(),
获取/设置ACL(Zend_ACL)实例和 角色(字符串或 Zend_Acl_角色_接口)用于 渲染时过滤掉页面, 和{get | set}UseAcl()控制 应启用ACL。方法 hasAcl()和hasRole()检查 帮助程序具有ACL实例或角色 注册的

如果登录的访问者与未登录的访问者(用户与来宾)具有不同的角色,则应该可以这样做。我以前从来没有这样做的必要,所以我不能给你任何代码片段,但请查看关于如何结合两者的视频教程


我仍然不明白你为什么要重构它,因为移动它似乎是一件麻烦的事,而且会增加一些不必要的复杂性,因为它可以在一个单独的视图助手中愉快地生活。所以,为什么不简单一点:)

Gordon的ACL是一条路要走(我投了更高的票)。我只是想插句话,确切地描述一下我的工作

我在导航配置中创建了
登录
注销
页面:

    <user_signin>
      <label>Sign in</label>
      <other_stuff></other_stuff>
      <resource>mvc:user_signin</resource>
      <privilege>navigate</privilege>
    </user_signin>

    <user_signout>
      <label>Sign out</label>
      <other_stuff></other_stuff>
      <resource>mvc:user_signout</resource>
      <privilege>navigate</privilege>
    </user_signout>

这样,它只是另一种导航,其行为与其他导航一样,只是有一点逻辑性。

Gordon的ACL是一种选择(我对它投了更高的票)。我只是想插句话,确切地描述一下我的工作

我在导航配置中创建了
登录
注销
页面:

    <user_signin>
      <label>Sign in</label>
      <other_stuff></other_stuff>
      <resource>mvc:user_signin</resource>
      <privilege>navigate</privilege>
    </user_signin>

    <user_signout>
      <label>Sign out</label>
      <other_stuff></other_stuff>
      <resource>mvc:user_signout</resource>
      <privilege>navigate</privilege>
    </user_signout>

这样,它只是另一个导航,其行为与其他导航一样,只是有一点逻辑性。

为什么要将其移动?它很简单,简洁明了。你能在表中添加一个登录和注销链接,然后动态显示其中一个吗?(除非我已经理解了这个问题)@Gordon-因为我需要它与其他问题一起生成links@Scobal-这基本上就是我要问的问题,是否应该添加配置文件和登录链接,我只是不确定如何重构我的表模式,以便我可以拥有通用的全局链接(主页),未登录时全局显示的链接(登录),以及登录时全局显示的链接(配置文件替换登录)。为什么要将其移动?它很简单,简洁明了。你能在表中添加一个登录和注销链接,然后动态显示其中一个吗?(除非我已经理解了这个问题)@Gordon-因为我需要它与其他问题一起生成links@Scobal-这基本上就是我要问的问题,是否应该添加配置文件和登录链接,我只是不确定如何重构我的表模式,以便我可以拥有通用的全局链接(主页),未登录时全局显示的链接(登录),以及登录时全局显示的链接(配置文件替换登录)。因为这样更灵活。如果说,我想在中间的这个链接,说4个链接,那就是它看起来从左边的5个链接总共第三个而不是在末端,或者在一个单独的区域。嗯,它是你的应用程序,所以你喜欢做什么。我只是觉得对于IF来说,这需要很多重构。如果雅格尼,那么雅格尼:)无论如何,让我知道它是否与Zend_Acl(如果你走这条路)一起工作,因为它会更灵活。如果说,我想在中间的这个链接,说4个链接,那就是它看起来从左边的5个链接总共第三个而不是在末端,或者在一个单独的区域。嗯,它是你的应用程序,所以你喜欢做什么。我只是觉得对于IF来说,这需要很多重构。如果是yagni,那么yagni:)无论如何,请告诉我它是否与Zend_Acl(如果您正走这条路)一起工作,因此您完全依赖xml进行导航?是的。我的海军