【问题标题】:Zend: ACL and Auth via inheritance, not compositionZend:ACL 和 Auth 通过继承,而不是组合
【发布时间】:2011-09-20 19:44:37
【问题描述】:

我已经阅读了几本不同的 Zend 书籍,其中 ACL 和 Auth 是使用组合实现的。它们通常涉及带有 preDispatch 方法的 Action Helpers,并在引导程序中注册。

现在,在到目前为止的所有编码中,我的每个控制器都执行相同的 ACL 和 Auth 方法。因此,我认为我不妨使用继承来完成此任务。我错过了什么吗?继承似乎更简单一些。

早些时候,我使用 Action Helpers 来避免将所有规则加载到 ACL 对象中。 (我只是将当前控制器注册为 ACL 资源,并为其添加规则)。

然而,当我开始集成 Zend Navigation 时,我发现我需要所有 ACL 规则(与控制器无关),才能确定向用户显示哪些菜单选项。

我猜想通过组合,我的 ACL 和 Auth 助手更容易在其他项目中使用,但这对我来说只是一个很小的好处。

谢谢!

【问题讨论】:

  • 您也可以使用控制器插件,请参阅stackoverflow.com/questions/4943940/… 似乎是一个组合,但非常接近控制器的继承。这并不妨碍您拥有可用于菜单的 Zend_Acl 对象。
  • 不错的一个regilero。您想将其剪切/粘贴到答案中吗?到目前为止,这是我最喜欢的。

标签: zend-framework acl authentication


【解决方案1】:

您也可以使用控制器插件,参见previous answer,看起来像是一个组合,但非常接近控制器的继承。这并不妨碍您拥有可用于菜单的 Zend_Acl 对象。

【讨论】:

  • 感谢 regilero。我忽略了前端控制器插件。
【解决方案2】:

一般来说,有很多正当理由更喜欢组合而不是继承。你可以在这里看到很多意见:Prefer composition over inheritance?

也就是说,由您决定是否有更好的理由使用继承而不是组合。您可以将 ACL 集成到基本控制器类中,并使所有控制器都继承自它。你在这里有另一个关于它的问题:Base controller for all controllers in zend framework

希望对你有帮助,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    相关资源
    最近更新 更多