加载插件
很多 Zend Framework 组件支持插件,允许通过指定类的前缀和到类的文件(不需要在
基本用例首先,假定下面的目录结构和类文件,并且根(toplevel)目录和库目录在 include_path 中:
application/
modules/
foo/
views/
helpers/
FormLabel.php
FormSubmit.php
bar/
views/
helpers/
FormSubmit.php
library/
Zend/
View/
Helper/
FormLabel.php
FormSubmit.php
FormText.php
现在,创建一个插件加载器来使各种各样的视图助手仓库可用: <?php
$loader = new Zend_Loader_PluginLoader();
$loader->addPrefixPath('Zend_View_Helper', 'Zend/View/Helper/')
->addPrefixPath('Foo_View_Helper', 'application/modules/foo/views/helpers')
->addPrefixPath('Bar_View_Helper', 'application/modules/bar/views/helpers');
?>接着用类名中添加路径时定义的前缀后面的部分来加载一个给定的视图助手: <?php
// load 'FormText' helper:
$formTextClass = $loader->load('FormText'); // 'Zend_View_Helper_FormText';
// load 'FormLabel' helper:
$formLabelClass = $loader->load('FormLabel'); // 'Foo_View_Helper_FormLabel'
// load 'FormSubmit' helper:
$formSubmitClass = $loader->load('FormSubmit'); // 'Bar_View_Helper_FormSubmit'
?>类加载后,就可以实例化了。
<?php // Store plugins in static registry 'foobar': $loader = new Zend_Loader_PluginLoader(array(), 'foobar'); ?>
其它使用同名注册表来实例化 处理插件路径上节的例子示例如何给插件加载器添加路径,那么如何确定已经加载的路径或删除他们呢?
测试插件和获取类的名字
有时候你想确定在执行一个动作之前是否插件类已经加载,
<?php
if ($loader->isLoaded('Adapter')) {
$class = $loader->getClassName('Adapter');
$adapter = call_user_func(array($class, 'getInstance'));
}
?>
|
|