2011-01-22 128 views
2

挑战:Zend框架插件包装载机

我想我的模块化库文件夹在我的Zend框架的应用程序。这很好,如果你想把所有的东西放在同一个命名空间中,比如“App_”。但问题是当你有一打的包中如注册包装,包装ACL,导航包,富包装等。现在,每个包有一定的视图助手,有些控制器插件,一些动作助手再加上一些其他的基类。您可以单独添加每个视图帮助程序路径,但这可能会破坏application.ini文件/ bootstrap。

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

为了说明一下,最好有一个资源插件可以传递包名称,它会添加名称空间,注册一些默认选项(如助手路径),然后您可以将其配置为向操作助手代理添加助手。每个插件包可能必须有自己的ini文件或一个init程序员可以初始化插件程序包的init类。任何想法或这种事情的知识将不胜感激。

+1

不知道这是否会对您有所帮助,但您是否考虑编写自定义自动加载器。 PhpThumb的一个例子是http://goo.gl/cxj7P – Marcin 2011-01-22 09:46:37

+0

@Marcin:我喜欢你的建议。我认为它是一个难题。不过,我正在寻找一个全功能插件包加载器。 – Fatmuemoo 2011-01-22 19:54:56

回答

1

你的问题很难找到解决办法。 ZF似乎没有按照你所希望的方式使用。

例如你想下面的包

  1. 导航
  2. ACL
  3. 会员注册

这些都是完全独立的,不需要所有的“插件”采埃孚在类似的方式。

  1. 导航需要存储和建造需要包中的每个请求,所述导航对象然后需要Zend_View对象或可能不被使用。导航在视图中被引用时会发生什么,但它不存在?
  2. ACL包如此特殊,它以多种不同方式集成到ZF中,它需要一个有意义的方式来存储和构建用于查询应用程序到应用程序的基础对象Zend_Acl
  3. 注册需要一个控制器,一个动作和一个表单传递给Zend_View并且表单需要被处理。这就需要插入到你的ACL对象,想必数据库和您的网站或许其他各个部分是它需要落在使用之外ACL

它不是不可能做你想做的更具体的权限,但必须有更好的方法。这几乎听起来像你试图建立一个可选的,可插入包的CMS?

的ACL问题我已经有控制器,助手,型号,形式等。Zend_Controller_Plugin运行的图书馆解决,并试图登录的用户,这个插件运行每一个应用程序创建,它的工作原理以及用途我已经使用了一段时间的ACL对象格式。

对于注册我的图书馆有RegisterController,如果我的申请需要注册,它有自己的RegisterController,它扩展了图书馆中的RegisterController。如果应用程序不需要注册,那么它没有自己的RegisterController

我希望有帮助,我真的认为以抽象的方式做这个建议是不值得的,永远不会如此坚实和紧密,你可以真正依靠它,因为每个应用程序都是特定的。

0

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

modules/ 
    signup/ 
    models/ 
    plugins/ 

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

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

如果你真的需要模块化库,定制的自动加载磁带机将是最好的解决办法(有一个简单的扩展抽象自动加载器)。

您也可以考虑为每个模块独立的库,添加到您的包含路径(不推荐使用,因为它会在应用程序变慢):

modules/ 
    signup/ 
    models/ 
    library/