挑战:
我想在我的zend框架应用程序中模块化我的库文件夹。如果你想把所有东西放在同一个命名空间中,例如“App_”,这很好。但是当你有十几个软件包,例如SignUp软件包,ACL软件包,导航软件包,Foo软件包等时,就会出现问题。现在每个软件包都有一些视图助手,一些控制器插件,一些动作助手以及一些其他基类。您可以单独添加每个视图助手路径,但这可能会破坏您的application.ini文件/ bootstrap。
所以问题是,是否有人知道ZF的'插件包'加载器?
为了澄清,有一个资源插件可以传递包名称,它会添加命名空间,注册一些默认选项(如帮助程序路径),然后您可以将其配置为向Action Helper代理添加帮助程序。每个插件包可能必须有自己的ini文件或init类,程序员可以在其中初始化插件包。任何有关此类事物的想法或知识都将受到赞赏。
答案 0 :(得分:1)
您的问题很难找到解决方案。 ZF似乎没有以您希望的方式使用。
例如,您需要以下包
这些都是完全独立的,并不是以类似的方式全部“插入”ZF。
Zend_View
个对象中使用导航对象,或者不需要。在视图中引用导航但它不存在时会发生什么?Zend_Controller_Plugin
,它需要一种有意义的方式来存储和构建Zend_Acl
对象以进行查询在申请基础上。Zend_View
的表单,表单需要处理。然后需要将其插入ACL对象,可能是数据库,也可能是站点的其他各个部分,它需要更多不属于ACL的特定权限做你想做的事并非不可能,但必须有更好的方法。这几乎听起来像你试图用可选的,可插入的软件包构建一个CMS?
我通过拥有控制器库,帮助程序,模型,表单等来解决ACL问题。Zend_Controller_Plugin
运行并尝试登录用户,此插件针对我创建的每个应用程序运行,它运行良好使用我已经使用了一段时间的ACL对象格式。
注册我的库中有一个RegisterController
,如果我的应用需要注册,它有自己的RegisterController
,它会扩展库中的RegisterController
。如果应用程序不需要注册,那么它没有自己的RegisterController
。
我希望有所帮助,我真的认为用抽象的方式做这件事是不值得的,并且永远不会那么坚固和严密,你可以真正依赖它,因为每个应用程序都是特定的。
答案 1 :(得分:0)
通常,在这种情况下,您应该使用已经模块化的模块而不是模块化库。
modules/
signup/
models/
plugins/
默认情况下,默认模块资源自动加载器配置为加载插件:
请参阅:http://framework.zend.com/manual/en/zend.loader.autoloader-resource.html:
如果你真的需要模块化库,定制的自动加载器将是最好的解决方案(有一个易于扩展的抽象自动加载器)。
您还可以考虑为每个模块添加单独的库,添加到您的包含路径(不推荐,因为它会降低应用程序速度):
modules/
signup/
models/
library/