【发布时间】:2010-03-16 11:40:42
【问题描述】:
我正在将 Zend Framework 集成到现有应用程序中。我想将应用程序切换到 Zend 的自动加载机制来替换几十个 include() 语句。
不过,我对自动加载机制有特定的要求。请允许我详细说明。
现有应用程序使用一个核心库(独立于 ZF),例如:
/Core/Library/authentication.php
/Core/Library/translation.php
/Core/Library/messages.php
这个核心库将始终保持不变,并为许多应用程序提供服务。该库包含类似
的类class ancestor_authentication { ... }
class ancestor_translation { ... }
class ancestor_messages { ... }
在应用程序中,还有一个Library目录:
/App/Library/authentication.php
/App/Library/translation.php
/App/Library/messages.php
这些包括扩展祖先类,并且是实际在应用程序中实例化的类。
class authentication extends ancestor_authentication { }
class translation extends ancestor_translation { }
class messages extends ancestor_messages { }
通常,这些类定义是空的。他们只是扩展他们的祖先并提供类名来实例化。
$authentication = new authentication();
此解决方案的目的是能够轻松自定义应用程序的各个方面,而无需修补核心库。
现在,我需要的自动加载器必须知道这种结构。当请求 authentication 类的对象时,自动加载器必须:
1. load /Core/Library/authentication.php
2. load /App/Library/authentication.php
我目前的方法是创建一个自定义函数,并将其绑定到 Zend_Loader_Autoloader 以获得特定的命名空间前缀。
在 Zend 中是否已经存在一种我忽略的方法? this question 中接受的答案有点暗示存在,但这可能只是措辞的错误选择。
是否有 Zend Autoloader 的扩展可以做到这一点?
您能否——我是 ZF 的新手——想出一种符合框架精神的优雅方式来扩展 Autoloader 的此功能?我没有必要寻找现成的实现,一些指针(这应该是你会这样调用的
xyz方法的扩展......)就已经足够了。
【问题讨论】:
标签: php zend-framework