我正在将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
方法的扩展,你会像这样调用......)已经足够了 .
2 回答
为了扩展Gordon已经指出的内容,我将创建自己的自动加载器类来实现
Zend_Loader_Autoloader_Interface
并将其推送到Zend_Loader_Autoloader
-stack .我不会采用
Zend_Loader
方法,即使尚未弃用,新的Zend_Loader_Autoloader
似乎是目前的最佳做法 .见manual on Zend_Loader:
请注意,自动加载器遵循ZF命名约定,因此
Zend_Foo_Bar
将在Zend/Foo/Bar.php
中查找 .然而,
另一种方法是create custom class Loader extending Zend_Loader然后注册它:
然后,ZF将使用此自动加载器而不是默认加载器 .