Zend:ACL和Auth通过继承,而不是组合

时间:2011-09-20 08:47:46

标签: zend-framework acl authentication

我已经阅读了一些不同的Zend书籍,其中ACL和Auth是使用合成实现的。它们通常涉及带有preDispatch方法的Action Helpers,它们在bootstrap中注册。

现在,在目前为止的所有编码中,我的每个控制器都执行相同的ACL和Auth方法。因此我想我也可以使用继承来实现这一目标。我错过了什么吗?继承看起来似乎更直接。

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

然而,当我开始集成Zend Navigation时,我发现我需要所有ACL规则(不管控制器如何),以便确定向用户显示哪些菜单选项。

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

希望有所帮助,

答案 1 :(得分:1)

您也可以使用控制器插件,请参阅previous answer,看起来像是一个合成但很接近控制器的继承。这并不妨碍您将Zend_Acl对象用于菜单。