【问题标题】:Zend Framework Plugin Package LoaderZend 框架插件包加载器
【发布时间】:2011-01-22 01:00:43
【问题描述】:

挑战:

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

所以问题是,有人知道 ZF 的“插件包”加载器吗?

为了澄清,最好有一个资源插件,你传递包名,它添加命名空间,注册一些默认选项,如帮助程序路径,然后你可以配置它以将帮助程序添加到 Action Helper 代理。每个插件包可能必须有自己的 ini 文件或 init 类,程序员可以在其中初始化插件包。任何类似的想法或知识都将不胜感激。

【问题讨论】:

  • 不确定这是否会对您有所帮助,但您是否考虑过编写自定义自动加载器。 PhpThumb 的一个例子是goo.gl/cxj7P
  • @Marcin:我喜欢你的建议。我认为这是一个难题。但是,我正在寻找一个功能齐全的插件包加载器。

标签: php zend-framework plugins modularity


【解决方案1】:

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

例如你想要以下包

  1. 导航
  2. ACL
  3. 注册

这些都是完全独立的,并非都以类似的方式“插入”到 ZF。

  1. 需要为每个需要包的请求存储和构建导航,然后导航对象需要在Zend_View对象中使用,或者可能不使用。当导航在视图中被引用但不存在时会发生什么?
  2. ACL 包非常具体,它以多种不同方式集成到 ZF 中,它需要一个 Zend_Controller_Plugin,它需要一种有意义的方式来存储和构建 Zend_Acl 对象以在应用程序上查询申请依据。
  3. 注册需要一个控制器、一个动作和一个传递给Zend_View的表单,并且表单需要被处理。然后需要将其插入您的 ACL 对象,可能是数据库,可能还有您网站的其他各个部分,它需要更具体的权限,超出 ACL 的使用范围

做自己想做的事并非不可能,但一定有更好的办法。听起来您好像在尝试使用可选的、可插入的包构建 CMS?

ACL 问题我已经通过控制器、助手、模型、表单等库解决了。Zend_Controller_Plugin 运行并尝试登录用户,此插件适用于我创建的每个应用程序,它运行良好使用我已经使用了一段时间的 ACL 对象格式。

对于注册,我的库中有一个RegisterController,如果我的应用程序需要注册,它有自己的RegisterController,它扩展了库中的RegisterController。如果应用程序不需要注册,则它没有自己的RegisterController

我希望这会有所帮助,我真的认为以建议的抽象方式执行此操作是不值得的,并且永远不会如此稳固和紧密,您可以真正依赖它,因为每个应用程序都是特定的。

【讨论】:

  • +1 表示如此彻底和周到。我不想构建一个 cms,我希望这些包是“抽象的”,并留给程序员来实现和添加业务逻辑。尽管带有依赖包的 CMS 包可能是一种选择。基于 ZF 构建的此类应用之一是 Tomato CMS[tomatocms.com/en_US/]
【解决方案2】:

通常,在这种情况下,您应该使用已经模块化的模块,而不是模块化库。

modules/
   signup/
     models/
     plugins/

默认模块资源自动加载器默认配置为加载插件:

见:http://framework.zend.com/manual/en/zend.loader.autoloader-resource.html

如果你真的需要对库进行模块化,定制的自动加载器将是最好的解决方案(有一个易于扩展的抽象自动加载器)。

您也可以考虑为每个模块添加单独的库,添加到您的包含路径(不推荐,因为它会降低应用程序的速度):

modules/
   signup/
     models/
     library/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    相关资源
    最近更新 更多