Zend Framework插件包加载器

时间:2011-01-22 01:00:43

标签: php zend-framework plugins modularity

挑战:

我想在我的zend框架应用程序中模块化我的库文件夹。如果你想把所有东西放在同一个命名空间中,例如“App_”,这很好。但是当你有十几个软件包,例如SignUp软件包,ACL软件包,导航软件包,Foo软件​​包等时,就会出现问题。现在每个软件包都有一些视图助手,一些控制器插件,一些动作助手以及一些其他基类。您可以单独添加每个视图助手路径,但这可能会破坏您的application.ini文件/ bootstrap。

所以问题是,是否有人知道ZF的'插件包'加载器?

为了澄清,有一个资源插件可以传递包名称,它会添加命名空间,注册一些默认选项(如帮助程序路径),然后您可以将其配置为向Action Helper代理添加帮助程序。每个插件包可能必须有自己的ini文件或init类,程序员可以在其中初始化插件包。任何有关此类事物的想法或知识都将受到赞赏。

2 个答案:

答案 0 :(得分:1)

您的问题很难找到解决方案。 ZF似乎没有以您希望的方式使用。

例如,您需要以下包

  1. 导航
  2. ACL
  3. 注册
  4. 这些都是完全独立的,并不是以类似的方式全部“插入”ZF。

    1. 需要为每个需要包的请求存储和构建导航,然后需要在Zend_View个对象中使用导航对象,或者不需要。在视图中引用导航但它不存在时会发生什么?
    2. ACL包是如此具体,它以很多不同的方式集成到ZF中,它需要Zend_Controller_Plugin,它需要一种有意义的方式来存储和构建Zend_Acl对象以进行查询在申请基础上。
    3. 注册需要一个控制器,一个动作和一个传递给Zend_View的表单,表单需要处理。然后需要将其插入ACL对象,可能是数据库,也可能是站点的其他各个部分,它需要更多不属于ACL的特定权限
    4. 做你想做的事并非不可能,但必须有更好的方法。这几乎听起来像你试图用可选的,可插入的软件包构建一个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/